Asp.net
為什麼當 redirectMode = ResponseRewrite 時 HttpContext.Session 為空
正如 其他地方所建議的那樣,我在我的自定義錯誤配置中使用了 redirectMode = ResponseRewrite,因此我的自定義錯誤頁面可以訪問異常資訊。一段時間以來,這就像一種魅力。
在添加更多“幫助使用者從錯誤中恢復”類型的功能時,我們需要一條之前儲存在 Session 中的資訊。在實現這一點時,我發現當redirectMode=ResponseRewrite 時,Session 的各種途徑都以null 結束,但是當redirectMode=ResponseRedirect(或未定義)時它們都被填充。
有誰知道為什麼?我們不得不在異常資訊(ResponseRewrite)或會話(ResponseRedirect)之間做出選擇,這似乎很奇怪。
關於富自定義錯誤處理的MSDN 文章告訴我,只有當控制傳遞方法是 Server.Transfer 時,Session 才可用,我假設 ResponseRewrite 在後台使用。顯然情況並非如此。
我還不知道這個問題的答案,但為了解決這個問題,我將 redirectMode 屬性從我的 Web 配置中取出,並將自定義邏輯放入 Global.asax
Application_Error處理程序中以執行我想要的操作。我用“使用者友好”消息異常替換異常,但本質上傳輸邏輯是:`if(Context.IsCustomErrorEnabled)
{
Server.Transfer("~/Error.aspx");
}`
然後 Error.aspx 頁面具有 Page_Load 程式碼以將錯誤拉出上下文並顯示消息。