簡體   English   中英

Application_Error()不會觸發

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM