12

我的 Global.aspx 中有以下内容,用于处理错误:

void Application_Error(object sender, EventArgs e)
{
    Exception exception = Server.GetLastError();
    if (exception != null)
    {
        //Log
        if (HttpContext.Current.Server != null)
        {
           HttpContext.Current.Server.Transfer("/siteerror.aspx");
        }
    }
}

这在大多数情况下都有效,但有时无法进入 Server.Transfer。由于某种原因 HttpContext.Current.Server 为空。我想出了这种情况发生在哪里:当用户控件和我的业务逻辑类中发生错误时。我在这里错过了什么吗?

谢谢

4

2 回答 2

2

Application_Error 块可以在应用程序生命周期之间的任何时间捕获异常。

应用程序生命周期是会话生命周期的父级,因为您可以理解单个应用程序中可以有许多会话。

因此,在创建会话之前或会话到期之后发生某些错误时,您可能会有 HttpContext.Current null。

如果您想编写特定于会话的错误重定向,您应该始终检查当前 HttpContext 的 Null。

您还可以使用 Server.GetLastError 了解发生的错误详细信息,并通过 web.config 中的 CustomError 标记编写错误页面重定向

请参阅以下链接

http://weblogs.asp.net/scottgu/archive/2006/08/12/Tip_2F00_Trick_3A00_-Show-Detailed-Error-Messages-to-Developers.aspx

于 2012-04-08T15:58:05.610 回答
1

应用程序错误可能随时发生 - 包括没有连接时。

例如,如果后台线程正在处理并导致异常。

于 2012-04-08T12:05:36.347 回答