這篇文章將為大家詳細(xì)講解有關(guān)如何在.net中捕捉全局未處理異常,文章內(nèi)容質(zhì)量較高,因此小編分享給大家做個(gè)參考,希望大家閱讀完這篇文章后對(duì)相關(guān)知識(shí)有一定的了解。
目前創(chuàng)新互聯(lián)已為成百上千家的企業(yè)提供了網(wǎng)站建設(shè)、域名、網(wǎng)頁(yè)空間、網(wǎng)站托管、服務(wù)器托管、企業(yè)網(wǎng)站設(shè)計(jì)、大石橋網(wǎng)站維護(hù)等服務(wù),公司將堅(jiān)持客戶導(dǎo)向、應(yīng)用為本的策略,正道將秉承"和諧、參與、激情"的文化,與客戶和合作伙伴齊心協(xié)力一起成長(zhǎng),共同發(fā)展。方式一、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 += "來(lái)自頁(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事件) }
方式二、通過(guò)HttpModule來(lái)捕獲未處理的異常
作用域:全局的request請(qǐng)求
描述:通過(guò)一個(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("來(lái)自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>
方式三、通過(guò)Global中捕獲未處理的異常
作用域:全局的request請(qǐng)求
描述:通過(guò)在Global中實(shí)現(xiàn)Application_Error方法,來(lái)達(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("來(lái)自Global的錯(cuò)誤處理<br />"); HttpContext.Current.Response.Write(errorMsg); Server.ClearError();//處理完及時(shí)清理異常 }
有關(guān)三種異常抓取的總結(jié)分析:
以上三種方法根據(jù)IIS處理請(qǐng)求的順序,可以知道,其三者觸發(fā)的先后順序是:
方式一、Page_Error處理頁(yè)面級(jí)未處理異常--抓取后未清理異常(ClearError)-->
方式二、通過(guò)HttpModule來(lái)捕獲未處理的異常--抓取后未清理異常(ClearError)-->
方式三、通過(guò)Global中捕獲未處理的異常
三種方式的作用范圍是:方式一中作用于當(dāng)前的aspx頁(yè)面,方法二和方式三都作用于全局
通過(guò)上面的兩點(diǎn),所以在實(shí)際使用中,如果是抓取全局的未出來(lái)的異常建議采用方式二
如果是抓取某一頁(yè)面的未處理的異常采用方式一
異常抓取后的處理邏輯總結(jié):
按照上面的三種方式抓取到的程序中未處理的異常后,那么在實(shí)際的項(xiàng)目中,具體處理方式如何呢?根據(jù)自己實(shí)際的項(xiàng)目應(yīng)用總結(jié)如下:
{
一般處理邏輯分三步:
第一步:解析具體的異常信息
第二步:解析后的異常信息落地入庫(kù)(文本日志(方便后續(xù)查問(wèn)題)
、數(shù)據(jù)庫(kù)日志(方便后續(xù)查問(wèn)題,統(tǒng)計(jì)提醒))
第三步:頁(yè)面重定向(將錯(cuò)誤重定向到定制的具體自定義錯(cuò)誤頁(yè)面)
重定向時(shí),不需要在異常抓取的時(shí)候處理,可通過(guò)配置文件實(shí)現(xiàn)靈活處理(具體實(shí)現(xiàn)方式,見(jiàn)下一篇)
在異常抓取后,不要調(diào)用ClearError()來(lái)清除異常,否則配置文件設(shè)置的錯(cuò)誤重定向?qū)⒉黄鹱饔?/p>
}
關(guān)于如何在.net中捕捉全局未處理異常就分享到這里了,希望以上內(nèi)容可以對(duì)大家有一定的幫助,可以學(xué)到更多知識(shí)。如果覺(jué)得文章不錯(cuò),可以把它分享出去讓更多的人看到。
網(wǎng)頁(yè)題目:如何在.net中捕捉全局未處理異常-創(chuàng)新互聯(lián)
網(wǎng)頁(yè)URL:http://www.rwnh.cn/article24/ddcjce.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供響應(yīng)式網(wǎng)站、定制開發(fā)、網(wǎng)站建設(shè)、用戶體驗(yàn)、動(dòng)態(tài)網(wǎng)站、企業(yè)建站
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)
猜你還喜歡下面的內(nèi)容