2012-04-08 32 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