這篇文章將為大家詳細講解有關如何在.net中捕捉全局未處理異常,文章內容質量較高,因此小編分享給大家做個參考,希望大家閱讀完這篇文章后對相關知識有一定的了解。

方式一、Page_Error處理頁面級未處理異常
作用域:當前的.aspx頁面
描述:在需要處理的aspx頁面的cs文件中,實現Page_Error方法,達到偵聽當前頁面未處理的異常
protected void Page_Error(object sender, EventArgs e)
{
string errorMsg = String.Empty;
Exception currentError = Server.GetLastError();
errorMsg += "來自頁面的異常處理<br />";
errorMsg += "系統發生錯誤:<br />";
errorMsg += "錯誤地址:" + Request.Url + "<br />";
errorMsg += "錯誤信息:" + currentError.Message + "<br />";
Response.Write(errorMsg);
Server.ClearError();//清除異常(否則將引發全局的Application_Error事件)
}方式二、通過HttpModule來捕獲未處理的異常
作用域:全局的request請求
描述:通過一個類實現IHttpModule接口,并偵聽未經處理的異常
實現步驟:
1、首先需要新建一個類(MyHttpModule),該類需實現IHttpModule接口,具體代碼實例如下:
/// <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異常,這個異常包含一個實際出現的異常
Exception ex = ctx.Server.GetLastError();
//實際發生的異常
Exception iex = ex.InnerException;
response.Write("來自ErrorModule的錯誤處理<br />");
response.Write(iex.Message);
ctx.Server.ClearError();
}
}2、配置文件配置相應的HttpModule節點
配置文件配置HttpModule節點時,有以下兩種方式(根據IIS版本而異)
方法1、當IIS版本為7.0以下時,在<system.web>中新增如下配置節點
<httpModules> <add name="MyHttpModule" type="MyHttpModule.MyHttpModules,MyHttpModule" /> </httpModules>
方法2、當IIS版本為7.0及其以上版本時,在<system.webServer>中新增如下配置節點
<modules> <add name="MyHttpModule" type="MyHttpModule.MyHttpModules,MyHttpModule"/> </modules>
方式三、通過Global中捕獲未處理的異常
作用域:全局的request請求
描述:通過在Global中實現Application_Error方法,來達到偵聽未經處理的異常
具體代碼如下:
void Application_Error(object sender, EventArgs e)
{
//獲取到HttpUnhandledException異常,這個異常包含一個實際出現的異常
Exception ex = Server.GetLastError();
//實際發生的異常
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();//處理完及時清理異常
}有關三種異常抓取的總結分析:
以上三種方法根據IIS處理請求的順序,可以知道,其三者觸發的先后順序是:
方式一、Page_Error處理頁面級未處理異常--抓取后未清理異常(ClearError)-->
方式二、通過HttpModule來捕獲未處理的異常--抓取后未清理異常(ClearError)-->
方式三、通過Global中捕獲未處理的異常
三種方式的作用范圍是:方式一中作用于當前的aspx頁面,方法二和方式三都作用于全局
通過上面的兩點,所以在實際使用中,如果是抓取全局的未出來的異常建議采用方式二
如果是抓取某一頁面的未處理的異常采用方式一
異常抓取后的處理邏輯總結:
按照上面的三種方式抓取到的程序中未處理的異常后,那么在實際的項目中,具體處理方式如何呢?根據自己實際的項目應用總結如下:
{
一般處理邏輯分三步:
第一步:解析具體的異常信息
第二步:解析后的異常信息落地入庫(文本日志(方便后續查問題)
、數據庫日志(方便后續查問題,統計提醒))
第三步:頁面重定向(將錯誤重定向到定制的具體自定義錯誤頁面)
重定向時,不需要在異常抓取的時候處理,可通過配置文件實現靈活處理(具體實現方式,見下一篇)
在異常抓取后,不要調用ClearError()來清除異常,否則配置文件設置的錯誤重定向將不起作用
}
關于如何在.net中捕捉全局未處理異常就分享到這里了,希望以上內容可以對大家有一定的幫助,可以學到更多知識。如果覺得文章不錯,可以把它分享出去讓更多的人看到。
網頁題目:如何在.net中捕捉全局未處理異常-創新互聯
網頁URL:http://www.yijiale78.com/article24/ddcjce.html
成都網站建設公司_創新互聯,為您提供響應式網站、定制開發、網站建設、用戶體驗、動態網站、企業建站
聲明:本網站發布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網站立場,如需處理請聯系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經允許不得轉載,或轉載時需注明來源: 創新互聯