在HttpApplication.Error之后,哪些ASP.NET生命周期事件会触发?

时间:2010-11-02 15:23:31

标签: asp.net lifecycle httpapplication

我想知道在通过HttpApplication.Error事件处理错误后,ASP.NET请求生命周期的哪些部分发生了。具体来说,http://msdn.microsoft.com/en-us/library/bb470252.aspx#Stages列出的哪些事件在发生错误后会触发?我知道EndRequest仍然会触发,我怀疑PreSendRequestHeaders和PreSendRequestContent也会激活,但除此之外我不知道。

是否取决于生命周期中何时发生错误?是否依赖于我是否在错误处理程序中调用Server.ClearError()?

我问这个问题,因为我不知道是否应该从我的错误处理程序中调用HttpApplication.CompleteRequest()。

5 个答案:

答案 0 :(得分: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);
    }

快乐编码:)

答案 1 :(得分:0)

即使发生错误,也会引发LogRequest事件。您可以为LogRequest事件提供事件处理程序,以便为请求提供自定义日志记录。 有关http://msdn.microsoft.com/en-us/library/system.web.httpapplication.logrequest.aspx

的更多详情

如果您的应用程序生成自定义错误输出,请通过调用HttpApplication.Error事件中的ClearError方法来禁止ASP.NET生成的默认错误消息。

答案 2 :(得分:0)

我没有检查,但我认为这取决于。

任何页面事件(Init / Load / PreRender)都可能出现错误。 引发错误后,如果清除错误,页面生命周期将从原来的位置继续。

答案 3 :(得分:0)

可以通过调用GetLastError方法来访问引发Error事件的异常。如果您的应用程序生成自定义错误输出,请通过调用ClearError方法来禁止ASP.NET生成的默认错误消息。

答案 4 :(得分:0)