2008-11-18 28 views
1

在Global.asax中的Application_Error方法中,我嘗試從會話狀態中檢索值。訪問Global.Application_Error中的SessionState

只要我拋出異常,我就可以訪問會話狀態。 EG:

thow new Exception("Test exception"); 

但是,如果它是一個未處理的異常,我試圖訪問會話狀態時,遇到下列錯誤:「會話狀態不是在這種情況下可用」。

爲什麼在行爲上的差異,是否有工作?

謝謝。

+0

這是奇怪的行爲。我使用類似的設置來記錄通知目的的例外情況的表格和會話信息,而沒有問題。我將在早上工作時覈實這一點。 :) – leppie 2008-11-18 20:55:07

+0

我不確定我遵循你正在嘗試做什麼。如果你手動拋出異常一切正常?你可以給出一個更完整的代碼示例什麼有效,什麼沒有? – 2008-11-18 21:30:08

回答

0

我想你試圖通過HttpContext.Current.Session訪問會話。我相信行爲的不同之處在於,在非註冊異常處理程序中,請求已進入「Failsafe」模式,並且頁面生命週期(包括加載和處置會話)已完成。

退房的lifecycle此頁面瞭解更多信息

2

我討厭ASP.NET有時...

所以產生使用錯誤:

Response.Redirect("thispagedoesnotexist.aspx", false); 

上面一行將重定向到會話狀態不可用的Application_Error

但是

throw new Exception("test"); 

上面一行將重定向與會話狀態可用

因此而不是做這一切的Application_Error到的Application_Error,在一個地方,我將不得不使用try /捕獲通過了我的代碼捕獲錯誤。然後從會話,日誌和電子郵件錯誤詳細信息中收集數據,然後重定向到友好的錯誤頁面。很多額外的代碼..

結論:Application_Error是毫無價值的。