ASP.NET中處理自訂錯誤的最佳方式

來源:互聯網
上載者:User

標籤:style   class   blog   code   http   tar   

要在ASP.NET中處理好自訂錯誤(Custom Errors)首先要拋棄使用web.config\customErrors。

<customErrors mode="RemoteOnly" defaultRedirect="/error/error.htm">    <error statusCode="404" redirect="/error/404.htm" /></customErrors>

使用web.config\customErrors最大的一個缺點是在顯示自訂錯誤頁面時會重新導向:

http://www.cnblogs.com/error/error.htm?aspxerrorpath=/cmt/p/3789549.html

這會帶來2個麻煩:

1. 會造成使用者反饋問題時提供的是重新導向後的URL。

2. 會造成使用者無法通過重新整理瀏覽器進行重試,或者問題解決後通過重新整理瀏覽器恢複正常。

我們目前想到的最佳處理方式是在Global.asax.cs的Application_Error中進行處理。

代碼如下:

protected void Application_Error(Object sender, EventArgs e){    Exception lastError = Server.GetLastError();    if (lastError != null)    {        if (lastError is HttpException)        {            if (((HttpException)lastError).ErrorCode == 404)            {                Response.StatusCode = 404;                Server.ClearError();                return;            }        }        CNBlogs.Infrastructure.Logging.Logger.Default.Error("Application_Error", lastError);        Response.StatusCode = 500;        Server.ClearError();    }}

由於我們在IIS中指定了404/500錯誤的自訂錯誤頁面,所以這裡只需要返回狀態代碼(需要IIS 7.0以上)。

這樣處理後,還可以方便地在顯示自訂錯誤之前記錄到log4net日誌。

另外需要注意的是一定要Server.ClearError(),不然ASP.NET會根據web.config\customErrors進行繼續處理(代碼中的自訂錯誤處理就會失效),錯誤資訊也會被記錄到Windows日誌(既然我們已經記錄到了log4net日誌,就沒必要再記錄到Windows日誌)。

你也許會問,幾行代碼就能解決的如此簡單的問題,值得興師動眾寫篇部落格還要發在首頁?

值!因為之前我們沒有認真對待這個地方的問題,多次為此付出了代價。也許園子裡還有人沒有注意這個地方的問題。

踩自己的坑,寫自己的部落格,然後讓別人無坑可踩,我想這也是寫部落格的一個價值體現吧。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.