【问题标题】:Which ASP.NET life cycle events fire after HttpApplication.Error?在 HttpApplication.Error 之后触发哪些 ASP.NET 生命周期事件?
【发布时间】:2010-11-02 15:23:30
【问题描述】:

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

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

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

【问题讨论】:

  • 太糟糕了,没有人真正直接回答关于哪些事件在处理错误后触发的问题。

标签: asp.net lifecycle httpapplication


【解决方案1】:

最好的方法是捕获server last errorappdomain异常。

所有这些都可以在 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);
    }

编码愉快:)

【讨论】:

    【解决方案2】:

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

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

    【讨论】:

      【解决方案3】:

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

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

      【讨论】:

        【解决方案4】:

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

        【讨论】:

          【解决方案5】:
          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2012-12-16
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2022-01-07
          相关资源
          最近更新 更多