当redirectMode = ResponseRewrite时,为什么HttpContext.Session为null

Jos*_*osh 10 asp.net exception-handling web-config custom-errors redirectmode

正如其他地方所建议的那样 ,我在自定义错误配置中使用redirectMode = ResponseRewrite,因此我的自定义错误页面可以访问异常信息.这有点像魅力一段时间了.

在添加更多"帮助用户从错误中恢复"类型功能时,我们需要一段先前存储在Session中的信息.实现这一点时,我发现当redirectMode = ResponseRewrite时,Session的各种途径以null结尾,但是当redirectMode = ResponseRedirect(或未定义)时,它们都被填充.

谁知道为什么?我们必须在具有异常信息(ResponseRewrite)或具有Session(ResponseRedirect)之间进行选择,这似乎很奇怪.

关于Rich Custom Error处理的MSDN文章告诉我,当控制传递方法是Server.Transfer时,Session才可用,这就是我假设在引擎盖下使用的ResponseRewrite.显然事实并非如此.

Jos*_*osh 5

我还不知道问题的答案,但是为了解决这个问题,我从我的web配置中取出了redirectMode属性,并将自定义逻辑放在Global.asax Application_Error处理程序中,以完成我想要的操作.我用"用户友好"消息异常替换异常,但实际上转移逻辑是:

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

然后Error.aspx页面有Page_Load代码将错误拉出上下文并显示消息.