10

如建議elsewhere,我在我的自定義錯誤配置中使用redirectMode = ResponseRewrite,所以我的自定義錯誤頁面可以訪問異常信息。一段時間以來,這一直很有魅力。爲什麼HttpContext.Session爲空時redirectMode = ResponseRewrite

在添加一些「幫助用戶從錯誤中恢復」類型功能時,我們需要一段先前存儲在Session中的信息。當實現這個時,我發現當redirectMode = ResponseRewrite時,Session的各種途徑在null結束,但當redirectMode = ResponseRedirect(或未定義)時,它們全部被填充。

任何人都知道爲什麼?似乎很奇怪,我們不得不在異常信息(ResponseRewrite)或Session(ResponseRedirect)之間進行選擇。

關於Rich Custom Error處理的MSDN article告訴我Session只有在控制傳遞方法是Server.Transfer時纔可用,這是我假定ResponseRewrite在引擎下使用的。顯然情況並非如此。

+0

+1我有完全相同的問題 – 2009-11-04 16:05:18

+1

Mauricio,我還不知道問題的答案,但爲了克服它,我將redirectMode屬性從我的web配置中取出,並將自定義邏輯放入Global.asax Application_Error處理程序來執行我想要的操作。我用「用戶友好」消息異常來替換異常,但本質上傳輸邏輯是: if(Context.IsCustomErrorEnabled) Server.Transfer(「〜/ Error.aspx」); } 然後Error.aspx頁面具有Page_Load代碼以將錯誤從上下文中提取出來並顯示消息。 – Josh 2009-11-04 17:21:44

+0

@Josh,看起來不錯,把它放在一個答案,所以我可以適當upvote它:-) – 2009-11-04 20:24:00

回答

5

我不知道這個問題的答案,但爲了克服它,我將redirectMode屬性從我的web配置中取出,並將自定義邏輯放在Global.asax Application_Error處理程序中,以執行我想要的操作。我使用的是「用戶友好」的字樣異常更換例外,但本質上傳輸的邏輯是:

if(Context.IsCustomErrorEnabled)
{
Server.Transfer("~/Error.aspx");
}

然後Error.aspx頁面的Page_Load代碼拉錯誤斷章取義,並顯示信息。