Asp.net中网站级异常捕获
最近在公司某管理系統(tǒng)中,用了一些獨(dú)立的模塊,在這些類的實(shí)現(xiàn)中,錯(cuò)誤是直接拋出異常的,我想這是我們通常的做法。然而,問題也來了,由于自己在Asp.net頁面中沒有去捕獲這些異常,并且多處頁面中都使用了這些類,于是在多個(gè)頁面都會(huì)出現(xiàn)不友好的錯(cuò)誤提示信息。
怎么辦?又不想一處一處修改代碼,既費(fèi)時(shí)又費(fèi)力,這樣編程不就變成了體力勞動(dòng),從而失去了樂趣。 這時(shí)讓我想起了自定義錯(cuò)誤頁,于是Google,終于找到了答案。
1、配置web.config:
<customErrors?mode="RemoteOnly"?defaultRedirect="ErrorPage.aspx"?redirectMode="ResponseRewrite"/> ?關(guān)鍵是redirectMode屬性,該屬性默認(rèn)為ResponseRedirect,由于被Redirect了,異常也就被忽略了,使你無法捕獲到異常。這里羅嗦一句:因?yàn)槌鲥e(cuò)前后被認(rèn)為是兩次請求,我們知道http協(xié)議是一種無狀態(tài)的協(xié)議,第二次請求忽略了第一次的異常也就不奇怪了。于是有人用了Session或Application來保存異常,這是不可取的。正確的做法是使用“ResponseRewrite"。2、輸出異常信息:
?我們知道網(wǎng)站出錯(cuò)時(shí),會(huì)自動(dòng)導(dǎo)向我們的ErrorPage.apx頁面,在ErrorPage.aspx中如何訪問這個(gè)異常呢?答案是:Server.GetLastError(),當(dāng)然有可能是Server.GetLastError().InnerException。這要具體分析了。
if(Server.GetLastError()!=null){???Response.Write(Server.GetLastError().Message);
}
順便說一下:
Asp.net MVC中就簡單多了,框架自帶了一個(gè)Error.aspx,異常保存在Model.Exception中,并且Web.config中也為我們配置好了。
在下從去年以來開發(fā)的網(wǎng)頁就基本是MVC的了,結(jié)構(gòu)清晰,擴(kuò)展方便,清涼的HTML代碼輸出。有空看看MVC的源代碼還是很有幫助的。轉(zhuǎn)載于:https://www.cnblogs.com/zhangchenliang/archive/2011/04/19/2021257.html
總結(jié)
以上是生活随笔為你收集整理的Asp.net中网站级异常捕获的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 为不同目录设置Forms身份验证
- 下一篇: 如何在dva的effects中实现回调