【问题标题】:Efficiently handle unknown controller action in MVC高效处理 MVC 中的未知控制器动作
【发布时间】:2018-06-12 02:42:36
【问题描述】:

我的站点正面临对具有不同操作名称的特定 MVC 控制器的不需要的机器人调用。它会导致非性别歧视行为的巨大例外。我们的日志系统几乎充满了错误。

我们决定采用以下方法作为解决方法。

  1. 有效处理不存在的操作请求,使其不会引发异常
  2. 限制机器人调用

我们编写了下面的代码来实现这一点。任何人都可以查看该方法。

protected override void HandleUnknownAction(string actionName)
{
   if (this.ActionInvoker.InvokeAction(this.ControllerContext, 
      "ReturnErrorForUnknownAction")) return;
}

public ActionResult ReturnErrorForUnknownAction()
{
   return Task.Delay(2000).ContinueWith(t =>
   {
       return new HttpStatusCodeResult(System.Net.HttpStatusCode.NotFound);
    }).Result;
}

以上代码工作正常,但不确定“ReturnErrorForUnknownAction”是否是阻塞调用。据我所知,Task.Result 会阻塞当前线程。

我的初衷是在发送404状态之前实现异步延迟。

【问题讨论】:

    标签: c# asp.net-mvc task-parallel-library


    【解决方案1】:

    使用Task.Result 会导致锁定。将方法更改为...

    public async Task<ActionResult> ReturnErrorForUnknownAction()
    {
       return await Task.Delay(2000).ContinueWith(t =>
       {
           return new HttpStatusCodeResult(System.Net.HttpStatusCode.NotFound);
        });
    }
    

    【讨论】:

    • 我尝试了上面的代码,但是它抛出了一个错误“附加信息:异步操作方法'ReturnErrorForUnknownAction'返回一个任务,它不能同步执行。”错误出现方法 this.ActionInvoker.InvokeAction
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-06-07
    • 2016-11-06
    • 2018-05-04
    • 2013-03-11
    • 2017-06-25
    • 2014-07-04
    相关资源
    最近更新 更多