在 Global.asax 中捕获错误

本文关键字:错误 Global asax | 更新日期: 2023-09-27 18:30:36

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

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为空。我弄清楚了这种情况发生的位置:当用户控件和我的业务逻辑类中发生错误时。

我在这里错过了什么吗?

在 Global.asax 中捕获错误

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

应用程序错误可能随时发生 - 包括不存在连接时。

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