Asp.net

為什麼當 redirectMode = ResponseRewrite 時 HttpContext.Session 為空

  • November 9, 2009

正如 其他地方所建議的那樣,我在我的自定義錯誤配置中使用了 redirectMode = ResponseRewrite,因此我的自定義錯誤頁面可以訪問異常資訊。一段時間以來,這就像一種魅力。

在添加更多“幫助使用者從錯誤中恢復”類型的功能時,我們需要一條之前儲存在 Session 中的資訊。在實現這一點時,我發現當redirectMode=ResponseRewrite 時,Session 的各種途徑都以null 結束,但是當redirectMode=ResponseRedirect(或未定義)時它們都被填充。

有誰知道為什麼?我們不得不在異常資訊(ResponseRewrite)或會話(ResponseRedirect)之間做出選擇,這似乎很奇怪。

關於富自定義錯誤處理的MSDN 文章告訴我,只有當控制傳遞方法是 Server.Transfer 時,Session 才可用,我假設 ResponseRewrite 在後台使用。顯然情況並非如此。

我還不知道這個問題的答案,但為了解決這個問題,我將 redirectMode 屬性從我的 Web 配置中取出,並將自定義邏輯放入 Global.asaxApplication_Error處理程序中以執行我想要的操作。我用“使用者友好”消息異常替換異常,但本質上傳輸邏輯是:

`if(Context.IsCustomErrorEnabled)

{

Server.Transfer("~/Error.aspx");

}`

然後 Error.aspx 頁面具有 Page_Load 程式碼以將錯誤拉出上下文並顯示消息。

引用自:https://stackoverflow.com/questions/1589566