在 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
为空。我弄清楚了这种情况发生的位置:当用户控件和我的业务逻辑类中发生错误时。
我在这里错过了什么吗?
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
应用程序错误可能随时发生 - 包括不存在连接时。
例如,如果后台线程正在处理并导致异常。