出於測試目的,我有這樣的方法:HttpNotFoundResult導致HttpException被拋出?
public ActionResult Index()
{
System.Diagnostics.Debug.Write("Index");
return new HttpNotFoundResult();
}
的方法被調用(「索引」被輸出)。不知何故,這導致HttpException
被拋出。在我的Global.asax文件我有一個Application_Error
實現:
void Application_Error(object sender, EventArgs e)
{
Exception exc = Server.GetLastError();
if (exc is System.Web.HttpException)
{
string msg = "UrlReferrer: "
+ Context.Request.UrlReferrer + " UserAgent: " + Context.Request.UserAgent
+ " UserHostAddress: " + Context.Request.UserHostAddress + " UserHostName: "
+ Context.Request.UserHostName;
ErrorHandler.Error(exc.Message, msg);
}
else {
...
}
}
這種方法的系統處理請求Index
之後被調用。我認爲HttpNotFoundResult
會導致異常被拋出 - 或者異常被拋出任何ActionResult
與404
這是很煩人的狀態代碼,因爲它是邊踩着我的控制器上的OnException
處理程序。對我的網站而言,Application_Error
應該是最後一個回退 - 大多數正常的錯誤都是在其他地方處理(通過控制器或動作過濾器)。我只想要Application_Error
記錄完全意外的異常,或404s的東西,如圖像或.js文件。
有沒有辦法從投擲程序生成404異常停止asp.net?另外,有沒有一種方法可以確定Application_Error
HttpException
是否是由編程生成的404引起的?
這是一個相當不錯的主意,它實際上解決了我的一個不同的問題。但是,asp.net引發的'HttpException'不會到達異常過濾器。看起來異常是從控制器外部拋出的。因此,這個解決方案在這裏不起作用。 – Oliver
@Oliver異常的含義是拋出控制器?我認爲你知道內置的HandleError不能處理除500以外的http異常。 – VJAI
我認爲,在asp.net堆棧中的某個點,檢查一個響應的狀態碼是否爲404,並在這種情況下拋出HttpException。我認爲一旦控制器被使用並被丟棄,就會發生這種情況,因爲'OnException'事件不會觸發它。所以在這裏,你的異常過濾器似乎沒有檢測到'HttpException',因爲它的'OnException'方法沒有被調用。但是,它將檢測從action方法內部手動拋出的HttpException。 – Oliver