最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

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

前言:  

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

方式一、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 += "系統(tǒng)發(fā)生錯誤:<br />";
   errorMsg += "錯誤地址:" + Request.Url + "<br />";
   errorMsg += "錯誤信息:" + currentError.Message + "<br />";
   Response.Write(errorMsg);
   Server.ClearError();//清除異常(否則將引發(fā)全局的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();
   //實際發(fā)生的異常
   Exception iex = ex.InnerException;

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

   ctx.Server.ClearError();
  }
}

2、配置文件配置相應的HttpModule節(jié)點

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

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

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

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

<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();
   //實際發(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();//處理完及時清理異常
  }

有關三種異常抓取的總結分析:

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

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

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

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

三種方式的作用范圍是:方式一中作用于當前的aspx頁面,方法二和方式三都作用于全局

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

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

異常抓取后的處理邏輯總結:

按照上面的三種方式抓取到的程序中未處理的異常后,那么在實際的項目中,具體處理方式如何呢?根據自己實際的項目應用總結如下:

  {

    一般處理邏輯分三步:

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

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

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

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

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

        在異常抓取后,不要調用ClearError()來清除異常,否則配置文件設置的錯誤重定向將不起作用

  }

總結

以上就是這篇文章的全部內容了,希望本文的內容對大家的學習或者工作具有一定的參考學習價值,如果有疑問大家可以留言交流,謝謝大家對腳本之家的支持。

相關文章

  • .Net?Core跨平臺應用開發(fā)串口篇HelloArm

    .Net?Core跨平臺應用開發(fā)串口篇HelloArm

    這篇文章介紹了.Net?Core跨平臺應用開發(fā)串口篇HelloArm,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2022-01-01
  • Request.QueryString與一般NameValueCollection的區(qū)別

    Request.QueryString與一般NameValueCollection的區(qū)別

    最近在做一個搜索程序的優(yōu)化改進,將搜索結果按照查詢的參數不同進行緩存。緩存的Key很自然的就想到了用查詢字符串,而獲取查詢字符串的最簡單方式是通過Request.QueryString.ToString()方法
    2011-12-12
  • .NET?Core?GC壓縮(compact_phase)底層原理解析

    .NET?Core?GC壓縮(compact_phase)底層原理解析

    GC的最后一個步驟,分為清除和壓縮兩種情況,清除操作將不可到達對象轉換為Free,而壓縮操作涉及復制對象并移動到新位置,更新所有引用,并重新劃分代邊界,本文介紹.NET Core GC壓縮原理解析,感興趣的朋友一起看看吧
    2025-01-01
  • ASP.NET中制作各種3D圖表的方法

    ASP.NET中制作各種3D圖表的方法

    這篇文章主要給大家介紹如何在ASP.NET中如何制作3D圖表。大家都知道圖表在ASP.NET技術中是一種特別受歡迎而又很重要的工具。圖表是表示數據的圖形,一般含有X和Y兩個坐標軸。我們可以用折線,柱狀,塊狀來表示數據。下面通過本文來一起學習下各種3D圖表的制作過程吧。
    2016-10-10
  • asp.net core 使用 TestServer 來做集成測試的方法

    asp.net core 使用 TestServer 來做集成測試的方法

    這篇文章主要介紹了asp.net core 使用 TestServer 來做集成測試,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-11-11
  • 淺談.Net中的序列化和反序列化

    淺談.Net中的序列化和反序列化

    這篇文章主要介紹了.Net中的序列化和反序列化的相關資料,文中講解非常細致,代碼幫助大家更好的理解和學習,感興趣的朋友可以了解下
    2020-07-07
  • C#實現Web文件上傳的兩種方法實例代碼

    C#實現Web文件上傳的兩種方法實例代碼

    在Web編程中,我們常需要把一些本地文件上傳到Web服務器上,上傳后,用戶可以通過瀏覽器方便地瀏覽這些文件,應用十分廣泛。
    2013-07-07
  • Asp.net程序優(yōu)化js、css實現合并與壓縮的方法

    Asp.net程序優(yōu)化js、css實現合并與壓縮的方法

    這篇文章主要介紹了Asp.net程序優(yōu)化js、css實現合并與壓縮的方法,使用第三方組件實現訪問時將js與css文件壓縮并緩存在客戶端的效果,非常具有實用價值,需要的朋友可以參考下
    2014-12-12
  • 在后臺cs中調用js中示例

    在后臺cs中調用js中示例

    cs中調用js中的方法有很多,不過比較使用的就那么幾個,下面為大家介紹下ScriptManager.RegisterStartupScript方法的使用
    2013-10-10

最新評論

磐安县| 新田县| 锡林郭勒盟| 丘北县| 昔阳县| 太仆寺旗| 漾濞| 洞头县| 亳州市| 大理市| 云林县| 孟连| 张家港市| 石阡县| 稻城县| 荔浦县| 固镇县| 清徐县| 咸阳市| 平顶山市| 汶上县| 扎鲁特旗| 泾川县| 福州市| 林芝县| 景德镇市| 泊头市| 宣汉县| 绍兴市| 犍为县| 苍南县| 宜宾市| 怀安县| 枣阳市| 绥德县| 调兵山市| 海丰县| 芦山县| 镇雄县| 镇坪县| 建水县|