2012-04-08 31 views
12

捕捉错误我这是指用于处理错误在我Global.aspx如下:在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为空。我想出了发生这种情况的原因:在用户控件和业务逻辑类中发生错误时。我在这里错过了什么吗?

谢谢

+2

任何理由不使用'Response.Redirect'宁可? – leppie 2012-04-08 09:41:56

+1

global.asax在哪里? – 2012-04-08 09:42:35

+0

@leppie我没有添加这个,所以不完全确定为什么以前的人选择Server.Transfer,它应该没有区别,但它应该吗? – Peuge 2012-04-08 09:53:50

回答

1

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

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

2

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

应用程序生命周期是会话生命周期的父代,因为您可以了解在单个应用程序中可能会有多个会话。

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

如果你想写会话特定的错误重定向,你应该总是检查当前HttpContext的空值。

您还可以使用Server.GetLastError知道错误发生的细节,写你的错误页面通过CustomError标签重定向在web.config中

请参阅以下链接

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