Asp.net中網站級異常捕獲

來源:互聯網
上載者:User

最近在公司某管理系統中,用了一些獨立的模組,在這些類的實現中,錯誤是直接拋出異常的,我想這是我們通常的做法。然而,問題也來了,由於自己在Asp.net頁面中沒有去捕獲這些異常,並且多處頁面中都使用了這些類,於是在多個頁面都會出現不友好的錯誤提示資訊。

怎麼辦?又不想一處一處修改代碼,既費時又費力,這樣編程不就變成了體力勞動,從而失去了樂趣。 這時讓我想起了自訂錯誤頁,於是Google,終於找到了答案。

1、配置web.config:

<customErrors mode="RemoteOnly" defaultRedirect="ErrorPage.aspx" redirectMode="ResponseRewrite"/>

 關鍵是redirectMode屬性,該屬性預設為ResponseRedirect,由於被Redirect了,異常也就被忽略了,使你無法捕獲到異常。這裡羅嗦一句:因為出錯前後被認為是兩次請求,我們知道http協議是一種無狀態的協議,第二次請求忽略了第一次的異常也就不奇怪了。於是有人用了Session或Application來儲存異常,這是不可取的。正確的做法是使用“ResponseRewrite"。

2、輸出異常資訊:

 我們知道網站出錯時,會自動導向我們的ErrorPage.apx頁面,在ErrorPage.aspx中如何訪問這個異常呢?答案是:Server.GetLastError(),當然有可能是Server.GetLastError().InnerException。這要具體分析了。

if(Server.GetLastError()!=null){
   Response.Write(Server.GetLastError().Message);
}

順便說一下:

Asp.net MVC中就簡單多了,架構內建了一個Error.aspx,異常儲存在Model.Exception中,並且Web.config中也為我們配置好了。

在下從去年以來開發的網頁就基本是MVC的了,結構清晰,擴充方便,清涼的HTML代碼輸出。有空看看MVC的原始碼還是很有協助的。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.