我的站點正面臨着不需要的機器人對具有不同操作名稱的特定MVC控制器的調用。它導致了非常規行爲的巨大異常。我們的記錄系統幾乎充滿了錯誤。在MVC中有效地處理未知的控制器操作
我們已決定採取以下方法作爲解決方法。
- 有效地處理請求非存在動作,因此不會引發異常
- 節流下來的機器人呼叫
我們已經寫了下面的代碼來實現這一目標。任何人都可以查看該方法。
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狀態之前實現異步延遲。
我嘗試了上述代碼,但它會引發錯誤 「**額外的資料:異步操作方法‘ReturnErrorForUnknownAction’返回一個任務,這是不能被同步執行**」 Error this form method ** this.ActionInvoker.InvokeAction ** – user897062