今天在開發過程中遇到一個很奇特的問題,就是 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 是在拋出異常的情況下才會執行的,也就是說,當出現異常時,你捕獲了,但是不處理就不會進入該方法,反之繼續往上拋出 最終會進入該方法!
新聞熱點
疑難解答