C# Global Application_Error不執行

weixin_30924079發表於2020-04-04

今天在開發過程中遇到一個很奇特的問題,就是 Global 檔案中的Application_Error 方法不執行的問題,很是苦惱,查了有關這方面的問題,感覺網友們回答的都有點亂,有些人說 在編譯時不需要這個檔案,在專案部署的時候再放進去,有些人說Global.asax可能沒被正常載入,session沒有啟用引起Application_Error內部出錯,等等

  最開始,我也以為是 Global.asax 檔案沒被載入,所以我在Application_Start 方法中設定斷點,發現 是可以進入的,這就排除了載入失敗的可能性,

  後來我在測試過程中意外的發現在webform 頁面的 的Load事件中 編寫一段會丟擲異常的程式碼,例如:(string str = "a"  int.parse(str)),然後在Application_Error 中是可以進入的,這就奇怪了,難道Global檔案只在WebForm頁面中才有效?這應該不可能啊,

因為我們得專案用的是html 頁面  後臺使用的是ashx(一般處理程式)裡面, 所以我就在想是不是異常要在 一般處理程式裡面去處理,我們的一般處理程式結構如圖:

我們在接受了請求後,響應之前是使用了try{}catch語句的,也就是捕獲了異常,但是並沒有處理異常,我就試了試加上throw ex;這句話在catch中,果然,問題解決了

解釋一下紅色框部分:原本關注Global 的Application_Error方法就是為了 給系統記錄日誌,紅色框中程式碼就是給資料庫中新增一條捕獲的異常的日誌資訊,這裡這部分可以寫在Global 的Application_Error方法中,同時替換這部分為 throw ex;這句話

和我現在這樣寫的結果都可以滿足我們專案的需求。

其實簡單的結論就是:全域性Global檔案 的Application_Error 是在丟擲異常的情況下才會執行的,也就是說,當出現異常時,你捕獲了,但是不處理就不會進入該方法,反之繼續往上丟擲 最終會進入該方法!

 

轉載於:https://www.cnblogs.com/Lixinhua-GoOn/p/3583002.html

相關文章