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

时间:2009-10-19 15:59:49

标签: asp.net exception-handling web-config custom-errors redirectmode

按照建议elsewhere,我在自定义错误配置中使用redirectMode = ResponseRewrite,因此我的自定义错误页面可以访问异常信息。这有点像魅力一段时间了。

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

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

富自定义错误处理的MSDN article告诉我,只有当控件传递方法是Server.Transfer时,Session才可用,这就是我认为在引擎盖下使用的ResponseRewrite。显然事实并非如此。

1 个答案:

答案 0 :(得分:5)

我还不知道这个问题的答案,但为了解决这个问题,我从我的web配置中取出了redirectMode属性,并将自定义逻辑放在Global.asax Application_Error处理程序中去做我所做的事情通缉。我用“用户友好”消息异常替换异常,但实际上转移逻辑是:

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

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