2010-11-02 78 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); 
    } 

快乐编码:)

相关问题