2011-04-09 175 views
6

在WebForm1.aspx.cs中:Application_Error不會觸發?

protected void Page_Load(object sender, EventArgs e) 
{ 
    throw new Exception("test exception"); 
} 

在Global.asax.cs中:

protected void Application_Error(object sender, EventArgs e) 
{ 
    // Code that runs when an unhandled error occurs 
    if (Server.GetLastError() is HttpUnhandledException) 
     Server.Transfer("ErrUnknown.aspx"); 
} 

但Application_Error事件不會被調用。相反,我得到一個運行時錯誤頁面。

在拋出異常之後,我必須做些什麼來調用Application_Error?

+0

你的web.config對自定義錯誤部分說了什麼? – Rich 2011-04-09 09:33:30

+0

什麼都沒有。 你指的是customErrors部分嗎? – ChrisPeeters 2011-04-09 09:49:44

+0

是的,還要檢查編譯Debug = True是否爲[set](http://msdn.microsoft.com/en-us/library/e8z01xdh%28v=vs.80%29.aspx) – Rich 2011-04-09 09:52:13

回答

5

看起來很好,應該調用Application_Error。

您是否通過Debugging檢查了您的申請?

其實你錯過了Server.ClearError()所以這個異常被傳遞給asp.net,但你應該在這裏壓制它,因爲你正在處理它。

protected void Application_Error(object sender, EventArgs e) 
{ 
    // Code that runs when an unhandled error occurs 
    if (Server.GetLastError() is HttpUnhandledException) 
    { 
     // suppressing the error so it should not pass to asp.net 
     Server.ClearError(); 
     Server.Transfer("ErrUnknown.aspx"); 
    } 
} 
+0

你好。 調試器在拋出異常並且不會繼續Application_Error的語句中的Page_Load中斷。 有什麼建議嗎? – ChrisPeeters 2011-04-09 09:47:56

1

我發現了這個問題。

Server.Transfer("ErrUnknown.aspx") 

是原因。

當試圖直接在瀏覽器中查看'ErrUnknown.aspx'時,我意識到我在該頁面中有錯誤。糾正之後Server.Transfer的工作原理

雖然在調試應用程序時事件沒有被觸發,但這是誤導嗎?

無論如何。

+0

不確定這對每個人都是一個很好的解決方案 – 2012-04-10 15:17:55