如何在.net中捕捉全局未處理異常-創(chuàng)新互聯(lián)

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

目前創(chuàng)新互聯(lián)已為成百上千家的企業(yè)提供了網(wǎng)站建設(shè)、域名、網(wǎng)頁空間、網(wǎng)站托管、服務(wù)器托管、企業(yè)網(wǎng)站設(shè)計、大石橋網(wǎng)站維護等服務(wù),公司將堅持客戶導(dǎo)向、應(yīng)用為本的策略,正道將秉承"和諧、參與、激情"的文化,與客戶和合作伙伴齊心協(xié)力一起成長,共同發(fā)展。

方式一、Page_Error處理頁面級未處理異常


作用域:當(dāng)前的.aspx頁面


描述:在需要處理的aspx頁面的cs文件中,實現(xiàn)Page_Error方法,達(dá)到偵聽當(dāng)前頁面未處理的異常

protected void Page_Error(object sender, EventArgs e)
  {
   string errorMsg = String.Empty;
   Exception currentError = Server.GetLastError();
   errorMsg += "來自頁面的異常處理<br />";
   errorMsg += "系統(tǒng)發(fā)生錯誤:<br />";
   errorMsg += "錯誤地址:" + Request.Url + "<br />";
   errorMsg += "錯誤信息:" + currentError.Message + "<br />";
   Response.Write(errorMsg);
   Server.ClearError();//清除異常(否則將引發(fā)全局的Application_Error事件)
  }

方式二、通過HttpModule來捕獲未處理的異常


作用域:全局的request請求


描述:通過一個類實現(xiàn)IHttpModule接口,并偵聽未經(jīng)處理的異常


實現(xiàn)步驟:


1、首先需要新建一個類(MyHttpModule),該類需實現(xiàn)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異常,這個異常包含一個實際出現(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é)點


配置文件配置HttpModule節(jié)點時,有以下兩種方式(根據(jù)IIS版本而異)


方法1、當(dāng)IIS版本為7.0以下時,在<system.web>中新增如下配置節(jié)點

<httpModules>
  <add name="MyHttpModule" type="MyHttpModule.MyHttpModules,MyHttpModule" />
</httpModules>

方法2、當(dāng)IIS版本為7.0及其以上版本時,在<system.webServer>中新增如下配置節(jié)點

<modules>
  <add name="MyHttpModule" type="MyHttpModule.MyHttpModules,MyHttpModule"/>
</modules>

方式三、通過Global中捕獲未處理的異常


作用域:全局的request請求


描述:通過在Global中實現(xiàn)Application_Error方法,來達(dá)到偵聽未經(jīng)處理的異常

具體代碼如下:

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>

}

關(guān)于如何在.net中捕捉全局未處理異常就分享到這里了,希望以上內(nèi)容可以對大家有一定的幫助,可以學(xué)到更多知識。如果覺得文章不錯,可以把它分享出去讓更多的人看到。

網(wǎng)頁題目:如何在.net中捕捉全局未處理異常-創(chuàng)新互聯(lián)
網(wǎng)頁URL:http://muchs.cn/article24/ddcjce.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供響應(yīng)式網(wǎng)站定制開發(fā)、網(wǎng)站建設(shè)用戶體驗、動態(tài)網(wǎng)站企業(yè)建站

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)

成都網(wǎng)站建設(shè)