15

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

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

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

4

5 回答 5

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);
    }

快乐编码:)

于 2012-09-05T11:27:29.850 回答
0

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

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

于 2011-09-14T09:13:01.373 回答
0

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

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

于 2012-03-20T18:50:13.427 回答
0
void Application_Error(Object sender, EventArgs e)

global.asax

http://msdn.microsoft.com/en-us/library/24395wz3%28v=vs.100%29.aspx
http://msdn.microsoft.com/en-us/library/fwzzh56s%28v=vs.100 %29.aspx

于 2012-08-26T16:52:01.860 回答
0

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

于 2012-03-27T11:01:42.927 回答