2010-11-02 56 views
14

我想知道在通過HttpApplication.Error事件處理錯誤之後,哪些部分的ASP.NET請求生命週期發生。具體來說,在http://msdn.microsoft.com/en-us/library/bb470252.aspx#Stages列出的哪些事件在發生錯誤後觸發?我知道EndRequest仍然會觸發,我懷疑PreSendRequestHeaders和PreSendRequestContent也會觸發,但除此之外,我不知道。哪些ASP.NET生命週期事件在HttpApplication.Error之後觸發?

這是否取決於生命週期中何時發生錯誤?它取決於我是否在錯誤處理程序中調用Server.ClearError()?

我問這個問題,因爲我不知道我是否應該從我的錯誤處理程序調用HttpApplication.CompleteRequest()。

+1

太糟糕了,沒有人真的直接回答了關於**的問題哪些事件**在處理錯誤後觸發。 – 2013-11-10 17:22:16

回答

0

即使發生錯誤,也會引發LogRequest事件。您可以爲LogRequest事件提供事件處理程序,以便爲請求提供自定義日誌記錄。 對http://msdn.microsoft.com/en-us/library/system.web.httpapplication.logrequest.aspx

進一步的細節。如果您的應用程序生成的自定義錯誤輸出,抑制由ASP.NET產生通過在HttpApplication.Error事件的ClearError方法的調用默認的錯誤消息。

0

我沒有檢查,但我認爲這取決於。

任何頁面事件(Init/Load/PreRender)都會引發錯誤。 發生錯誤後,如果清除錯誤,頁面生命週期會從原來的位置繼續。

0

引發Error事件的異常可以通過調用GetLastError方法來訪問。如果您的應用程序生成自定義錯誤輸出,請通過調用ClearError方法來抑制由ASP.NET生成的默認錯誤消息。

3

,最好的辦法是捕捉服務器最後一個錯誤的AppDomain例外。

所有這些都可以在Global.asax.cs文件中完成。

檢查以下步驟:

1-在Global.asax.cs中,抓住最後一個錯誤並記錄它。

protected void Application_Error(object sender, EventArgs e) 
    { 
     Exception exception = Server.GetLastError(); 
     Server.ClearError(); 
     log.Error("Application Error caught in Global ", exception); 
    } 

2 - 添加上的AppDomain UnhandledException事件的事件處理程序,這應該被添加到的Application_Start:

protected void Application_Start(object sender, EventArgs e) 
    { 
     //.... 
     AppDomain.CurrentDomain.UnhandledException 
       += new UnhandledExceptionEventHandler(CurrentDomain_UnhandledException); 
    }  

3-這裏是CurrentDomain_UnhandledException執行:

void CurrentDomain_UnhandledException(object sender, 
                UnhandledExceptionEventArgs e) 
    { 
     if (e != null) 
     log.Error("Domain Unhandled Exception: ", e.ExceptionObject as Exception); 
    } 

快樂編碼:)

相關問題