.net捕捉全局未處理異常的3種方式
當(dāng)前位置:點晴教程→知識管理交流
→『 技術(shù)文檔交流 』
:.net捕捉全局未處理異常的3種方式 我們在實際項目開發(fā)中,經(jīng)常會遇到一些不可預(yù)見的異常產(chǎn)生,有的異常在程序運行時就對其進(jìn)行處理(try) 方式一、Page_Error處理頁面級未處理異常 作用域:當(dāng)前的.aspx頁面
方式二、通過HttpModule來捕獲未處理的異常 作用域:全局的request請求 /// <summary> /// MyHttpModule /// </summary> public class MyHttpModules : IHttpModule { public void Init(HttpApplication context) { context.Error += new EventHandler(context_Error); } public void context_Error(object sender, EventArgs e) { //此處處理異常 HttpContext ctx = HttpContext.Current; HttpResponse response = ctx.Response; HttpRequest request = ctx.Request; //獲取到HttpUnhandledException異常,這個異常包含一個實際出現(xiàn)的異常 Exception ex = ctx.Server.GetLastError(); //實際發(fā)生的異常 Exception iex = ex.InnerException; response.Write("來自ErrorModule的錯誤處理<br />"); response.Write(iex.Message); ctx.Server.ClearError(); } } 2、配置文件配置相應(yīng)的HttpModule節(jié)點 <httpModules> <add name="MyHttpModule" type="MyHttpModule.MyHttpModules,MyHttpModule" /> </httpModules>
<modules> <add name="MyHttpModule" type="MyHttpModule.MyHttpModules,MyHttpModule"/> </modules> 方式三、通過Global中捕獲未處理的異常 作用域:全局的request請求 void Application_Error(object sender, EventArgs e) { //獲取到HttpUnhandledException異常,這個異常包含一個實際出現(xiàn)的異常 Exception ex = Server.GetLastError(); //實際發(fā)生的異常 Exception iex = ex.InnerException; string errorMsg = String.Empty; string particular = String.Empty; if (iex != null) { errorMsg = iex.Message; particular = iex.StackTrace; } else { errorMsg = ex.Message; particular = ex.StackTrace; } HttpContext.Current.Response.Write("來自Global的錯誤處理<br />"); HttpContext.Current.Response.Write(errorMsg); Server.ClearError();//處理完及時清理異常 }
有關(guān)三種異常抓取的總結(jié)分析:以上三種方法根據(jù)IIS處理請求的順序,可以知道,其三者觸發(fā)的先后順序是: 方式一、Page_Error處理頁面級未處理異常--抓取后未清理異常(ClearError)--> 方式二、通過HttpModule來捕獲未處理的異常--抓取后未清理異常(ClearError)--> 方式三、通過Global中捕獲未處理的異常 三種方式的作用范圍是:方式一中作用于當(dāng)前的aspx頁面,方法二和方式三都作用于全局 通過上面的兩點,所以在實際使用中,如果是抓取全局的未出來的異常建議采用方式二 如果是抓取某一頁面的未處理的異常采用方式一 異常抓取后的處理邏輯總結(jié):按照上面的三種方式抓取到的程序中未處理的異常后,那么在實際的項目中,具體處理方式如何呢?根據(jù)自己實際的項目應(yīng)用總結(jié)如下: { 一般處理邏輯分三步: 第一步:解析具體的異常信息 第二步:解析后的異常信息落地入庫(文本日志(方便后續(xù)查問題) 、數(shù)據(jù)庫日志(方便后續(xù)查問題,統(tǒng)計提醒)) 第三步:頁面重定向(將錯誤重定向到定制的具體自定義錯誤頁面) 重定向時,不需要在異常抓取的時候處理,可通過配置文件實現(xiàn)靈活處理(具體實現(xiàn)方式,見下一篇) 在異常抓取后,不要調(diào)用ClearError()來清除異常,否則配置文件設(shè)置的錯誤重定向?qū)⒉黄鹱饔?/p> } 該文章在 2023/11/22 8:54:44 編輯過
|
關(guān)鍵字查詢
相關(guān)文章
正在查詢... |