[英]Application_Error() doesn't fire
我有一個MVC 5應用程序,並且試圖捕獲任何未捕獲的錯誤。 為此,我在Global.asax.cs中創建了一個方法,如下所示:
protected void Application_Error()
{
MyLogger.Log("some text");
}
當我在本地運行項目時,此方法會針對404、500等觸發。但是,當我將應用程序切換到Release並將其放在服務器上時,它可以處理404,但不再處理500。 我創建了一個方法來拋出這樣的錯誤:
[HttpGet]
[AllowAnonymous]
public string Error()
{
var s = int.Parse("hello abc 123");
return "Hello World";
}
課程方法崩潰,因為它無法將文本轉換為int,但Application_Error()不會觸發。 如果我嘗試訪問一個不存在的頁面,它將觸發並且可以在日志中看到它。
我查看了web.config,在生產環境中,設置如下:
<customErrors mode="On" defaultRedirect="~/Error/Index"></customErrors>
另外,在filter.config中,我有:
filters.Add(new HandleErrorAttribute());
如果我在上面的那條評論,我的Application_Error激活,我可以看到日志。 但是,該頁面不再重定向到我的自定義錯誤頁面。 取而代之的是,我得到一個白色屏幕,顯示以下消息:
由於發生內部服務器錯誤,因此無法顯示該頁面。
我的問題是:
當我使用上述web.config設置將網站投入生產時,為什么網站停止處理404錯誤。 如何使其捕獲這些錯誤?
編輯:我把問題歸結為:如果我注釋掉HandleError屬性,那么我的Application_Error()方法將觸發。 如果我放回去,它不會。 在我的本地計算機上,它始終可以工作,當我將其推到蔚藍時,它停止工作。
HandleError屬性將觸發,因此Application_Error將不會觸發。 由於HandleException是MVC管道的一部分,它將處理該錯誤並防止引發該錯誤。 這對我來說一直在本地工作,原因是我在web.config中有debug="off"
。
所以我的解決方案是要么不使用HandleError異常,要么編寫一個自定義的擴展並記錄日志。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.