ASP.NET 全域異常處理

來源:互聯網
上載者:User

在我們寫程式時偶爾會由於疏忽導致有些異常沒有進行處理。如果將異常詳細資料提示給使用者會帶來不安全因素,如果不提示詳細資料又會給使用者報告異常帶來麻煩。雖然可以通過配置customErrors mode來實現只有管理員可以查看錯誤,但發現問題的時間可能會比較長。通過全域異常處理就可以在異常發生時立即記錄異常,或直接發送郵件向管理員報告,以在最快的速度發現並處理異常。

要為ASP.NET應用程式添加全域異常處理主要是添加HttpApplication的Error事件的處理。這與在BeginRequest事件中進行URL重寫方法類似。先建一個繼承System.Web.IHttpModule的類。然後添加Init方法和ShowError方法。

namespace Snowdream
{

    public class HttpModule : System.Web.IHttpModule
    {

        public void Init(System.Web.HttpApplication context)
        {
            context.Error += new EventHandler(ShowError);

        }

        private void ShowError(object sender, EventArgs e)
        {

            //在這裡進行異常處理

        }
    }
}

然後還需要配置web.config的httpModules使之生效.

我現在比較喜歡的做法是將異常的詳細資料記錄在資料庫中,然後返回一個編號,再將頁面重新導向到自己寫的錯誤提示頁,將這個編號提示給使用者,使用者如果要報告錯誤只需提供該錯誤編號,管理員就能在後台中找到錯誤的詳細資料並進行修改。

下面說2個我在做全域異常處理時碰到的問題及我的解決方案

第一個是擷取異常hResult,由於是私人屬性不能直接存取,解決方案是通過(int)System.Runtime.InteropServices.Marshal.GetHRForException(exception)來擷取

第二個問題是記錄了很多不是由於ASP.NET應用程式引發的錯誤,比如使用者鍵入一個錯誤的URL,異常處理系統會記錄一個“檔案不存在。”的錯誤,而這些錯誤記錄不僅不能真正反映出ASP.NET應用程式的異常反而會給管理員帶來更多麻煩。我的解決方案是通過判斷if(exception is System.Web.HttpException)來過濾這些HttpException.

相關文章

聯繫我們

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