亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

.net中捕捉全局未處理異常的三種方式示例

 更新時(shí)間:2018年06月03日 14:26:04   作者:猴子哥  
這篇文章主要給大家介紹了關(guān)于.net中捕捉全局未處理異常的三種方式,分別是Page_Error處理頁(yè)面級(jí)未處理異常、通過HttpModule來捕獲未處理的異常以及通過Global中捕獲未處理的異常,需要的朋友可以參考下

前言:  

我們?cè)趯?shí)際項(xiàng)目開發(fā)中,經(jīng)常會(huì)遇到一些不可預(yù)見的異常產(chǎn)生,有的異常在程序運(yùn)行時(shí)就對(duì)其進(jìn)行處理(try)
但是,有的程序不需要每一個(gè)地方都用try進(jìn)行處理,那么針對(duì)這種情況,可以參照下面的方式,實(shí)現(xiàn)對(duì)異常的統(tǒng)一抓取處理,下面話不多說了,來一起看看詳細(xì)的介紹吧。

方式一、Page_Error處理頁(yè)面級(jí)未處理異常

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

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

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

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

作用域:全局的request請(qǐng)求

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

實(shí)現(xiàn)步驟:

1、首先需要新建一個(gè)類(MyHttpModule),該類需實(shí)現(xiàn)IHttpModule接口,具體代碼實(shí)例如下:

/// <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異常,這個(gè)異常包含一個(gè)實(shí)際出現(xiàn)的異常
   Exception ex = ctx.Server.GetLastError();
   //實(shí)際發(fā)生的異常
   Exception iex = ex.InnerException;

   response.Write("來自ErrorModule的錯(cuò)誤處理<br />");
   response.Write(iex.Message);

   ctx.Server.ClearError();
  }
}

2、配置文件配置相應(yīng)的HttpModule節(jié)點(diǎn)

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

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

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

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

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

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

作用域:全局的request請(qǐng)求

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

具體代碼如下:

void Application_Error(object sender, EventArgs e)
  {
   //獲取到HttpUnhandledException異常,這個(gè)異常包含一個(gè)實(shí)際出現(xiàn)的異常
   Exception ex = Server.GetLastError();
   //實(shí)際發(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的錯(cuò)誤處理<br />");
   HttpContext.Current.Response.Write(errorMsg);

   Server.ClearError();//處理完及時(shí)清理異常
  }

有關(guān)三種異常抓取的總結(jié)分析:

以上三種方法根據(jù)IIS處理請(qǐng)求的順序,可以知道,其三者觸發(fā)的先后順序是:

  方式一、Page_Error處理頁(yè)面級(jí)未處理異常--抓取后未清理異常(ClearError)-->

  方式二、通過HttpModule來捕獲未處理的異常--抓取后未清理異常(ClearError)-->

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

三種方式的作用范圍是:方式一中作用于當(dāng)前的aspx頁(yè)面,方法二和方式三都作用于全局

通過上面的兩點(diǎn),所以在實(shí)際使用中,如果是抓取全局的未出來的異常建議采用方式二

如果是抓取某一頁(yè)面的未處理的異常采用方式一

異常抓取后的處理邏輯總結(jié):

按照上面的三種方式抓取到的程序中未處理的異常后,那么在實(shí)際的項(xiàng)目中,具體處理方式如何呢?根據(jù)自己實(shí)際的項(xiàng)目應(yīng)用總結(jié)如下:

  {

    一般處理邏輯分三步:

    第一步:解析具體的異常信息

    第二步:解析后的異常信息落地入庫(kù)(文本日志(方便后續(xù)查問題)

        、數(shù)據(jù)庫(kù)日志(方便后續(xù)查問題,統(tǒng)計(jì)提醒))

    第三步:頁(yè)面重定向(將錯(cuò)誤重定向到定制的具體自定義錯(cuò)誤頁(yè)面)

        重定向時(shí),不需要在異常抓取的時(shí)候處理,可通過配置文件實(shí)現(xiàn)靈活處理(具體實(shí)現(xiàn)方式,見下一篇)

        在異常抓取后,不要調(diào)用ClearError()來清除異常,否則配置文件設(shè)置的錯(cuò)誤重定向?qū)⒉黄鹱饔?/p>

  }

總結(jié)

以上就是這篇文章的全部?jī)?nèi)容了,希望本文的內(nèi)容對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,如果有疑問大家可以留言交流,謝謝大家對(duì)腳本之家的支持。

相關(guān)文章

最新評(píng)論