公交车上荫蒂添的好舒服的电影-公用玩物(np双xing总受)-公用小荡货芊芊-公与妇仑乱hd-攻把受做哭边走边肉楼梯play-古装一级淫片a免费播放口

LOGO OA教程 ERP教程 模切知識交流 PMS教程 CRM教程 開發(fā)文檔 其他文檔  
 
網(wǎng)站管理員

.net捕捉全局未處理異常的3種方式

Ccoffee
2023年11月22日 8:54 本文熱度 1134
:.net捕捉全局未處理異常的3種方式


我們在實際項目開發(fā)中,經(jīng)常會遇到一些不可預見的異常產(chǎn)生,有的異常在程序運行時就對其進行處理(try)
但是,有的程序不需要每一個地方都用try進行處理,那么針對這種情況,可以參照下面的方式,實現(xiàn)對異常的統(tǒng)一抓取處理

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

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

1
2
3
4
5
6
7
8
9
10
11
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、配置文件配置相應的HttpModule節(jié)點
  配置文件配置HttpModule節(jié)點時,有以下兩種方式(根據(jù)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中實現(xiàn)Application_Error方法,來達到偵聽未經(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();//處理完及時清理異常
        }

 

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

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

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

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

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

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

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

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

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

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

  {

    一般處理邏輯分三步:

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

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

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

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

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

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

  }


該文章在 2023/11/22 8:54:44 編輯過

全部評論1

Ccoffee
2023年11月22日 15:31
 從優(yōu)先級高到低排序:Page_Error事件處理方法 > ErrorPage屬性 > Application_Error事件處理方法 > <customErrors>配置項。雖然排序是這樣,但是這個排序之間又有微妙的關系。首先,要讓ErrorPage屬性能夠發(fā)揮作用,<customErrors>配置項中的mode屬性必須設為"On";其次,雖然Page_Error事件處理方法排在最前面,但是,如果少掉了Server.ClearError()方法的話,仍然會引發(fā)優(yōu)先級較低的錯誤處理,這種情況對于Application_Error事件處理方法也是如此。順序是排好了,但是順序卻不是最重要的問題,甚至可以說是沒有太多意義的問題,因為在很多情況下,你可能并不會混合使用這四種處理機制。我想,最重要的問題還是在如何選用這些錯誤處理機制上。
關鍵字查詢
相關文章
正在查詢...
點晴ERP是一款針對中小制造業(yè)的專業(yè)生產(chǎn)管理軟件系統(tǒng),系統(tǒng)成熟度和易用性得到了國內(nèi)大量中小企業(yè)的青睞。
點晴PMS碼頭管理系統(tǒng)主要針對港口碼頭集裝箱與散貨日常運作、調(diào)度、堆場、車隊、財務費用、相關報表等業(yè)務管理,結合碼頭的業(yè)務特點,圍繞調(diào)度、堆場作業(yè)而開發(fā)的。集技術的先進性、管理的有效性于一體,是物流碼頭及其他港口類企業(yè)的高效ERP管理信息系統(tǒng)。
點晴WMS倉儲管理系統(tǒng)提供了貨物產(chǎn)品管理,銷售管理,采購管理,倉儲管理,倉庫管理,保質(zhì)期管理,貨位管理,庫位管理,生產(chǎn)管理,WMS管理系統(tǒng),標簽打印,條形碼,二維碼管理,批號管理軟件。
點晴免費OA是一款軟件和通用服務都免費,不限功能、不限時間、不限用戶的免費OA協(xié)同辦公管理系統(tǒng)。
Copyright 2010-2025 ClickSun All Rights Reserved

主站蜘蛛池模板: 国产激情久久精品 | 国产在线线宅男网站啪哩 | 国产高清不卡在线 | 国产高清成免费视频 | 国产麻豆天美果冻网盘高清资源 | 国产aⅴ无码精品一区二区 国产aⅴ无码精品一区二区三区 | 国产精品无码一区二区三区毛片 | 国产呦精品一区二区三区 | 国产午夜影视大全免费观看 | 寡妇高潮一级毛片免费看懂色 | 国产精品一区在线麻豆 | 国产片婬乱一级毛片调 | 国产精品日韩精品久久蜜桃 | 国产精品日韩欧美一区二区三区 | av在线中文观看 | 国产成人av在线你懂的 | 国产人妖精品视频一区 | 18禁美女黄网站色大片免费 | 国产绿奴在线观看9色 | 99精品视频只99有精品 | 国产精品白嫩在线观看 | 高潮真紧好爽我视频 | 成人精品国产一区二区三区 | 国产午夜无码喷水福利在线观看 | 国产成人高清亚洲黄片大全 | 国产精品午夜福利天堂 | 国产精品国产三级国产普通话一 | 国产一区二区无码专区 | 国产高清一区二区三区免费视频 | 变态另类重口特级 | 国产欧美成人一区二区三区 | 国产三级农村妇女在线看系列 | 国产品精在线观看一区 | 国产99精品一区二区三区免费 | av亚欧洲日产国码无 | 国产一区精品 | 国产精品国产高清国产专区720p | 国产专区亚洲欧美另类在线观看 | 99久久人妻精品免费一区 | a级日本乱理伦片免费入口: | 精品日本三级在线观看 |