【问题标题】:Why is HttpContext.Session null when redirectMode = ResponseRewrite为什么当 redirectMode = ResponseRewrite 时 HttpContext.Session 为空
【发布时间】:2010-12-08 01:19:54
【问题描述】:

正如elsewhere 所建议的那样,我在我的自定义错误配置中使用了redirectMode = ResponseRewrite,因此我的自定义错误页面可以访问异常信息。一段时间以来,这就像一种魅力。

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

有人知道为什么吗?我们必须在拥有异常信息 (ResponseRewrite) 或拥有 Session (ResponseRedirect) 之间做出选择,这似乎很奇怪。

富自定义错误处理中的MSDN article 告诉我,只有当控制传递方法是 Server.Transfer 时,Session 才可用,这就是我假设 ResponseRewrite 在后台使用的方法。显然不是这样的。

【问题讨论】:

  • +1 我遇到了完全相同的问题
  • Mauricio,我还不知道这个问题的答案,但为了解决这个问题,我将 redirectMode 属性从我的 Web 配置中取出,并将自定义逻辑放入 Global.asax Application_Error 处理程序中做我想做的。我用“用户友好”消息异常替换异常,但本质上传输逻辑是: if(Context.IsCustomErrorEnabled) { Server.Transfer("~/Error.aspx");然后 Error.aspx 页面有 Page_Load 代码将错误拉出上下文并显示消息。
  • @Josh,看起来不错,把它放在答案中,这样我就可以正确地投票了:-)

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


【解决方案1】:

我还不知道这个问题的答案,但为了解决这个问题,我从我的 Web 配置中取出了 redirectMode 属性,并将自定义逻辑放入 Global.asax Application_Error 处理程序中以执行我想要的操作。我将异常替换为“用户友好”消息异常,但本质上传输逻辑是:

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-06-07
    • 2010-10-21
    • 1970-01-01
    • 2013-04-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-02-11
    相关资源
    最近更新 更多