代码之家  ›  专栏  ›  技术社区  ›  Josh

当RedirectMode=ResponseRewith时,为什么httpContext.Session为空

  •  10
  • Josh  · 技术社区  · 15 年前

    正如建议的那样 elsewhere ,我在自定义错误配置中使用redirectMode=responseRewith,以便自定义错误页可以访问异常信息。有一段时间,这真是一种魅力。

    在添加更多“帮助用户从错误中恢复”类型功能时,我们需要一条以前存储在会话中的信息。在实现这一点时,我发现当redirectMode=responseRewith时,会话的各种通道以空结束,但当redirectMode=responseRedit(或未定义)时,它们都被填充。

    有人知道为什么吗?我们必须在异常信息(responserewrite)和会话(responseredirect)之间进行选择,这似乎很奇怪。

    这个 MSDN article 在丰富的自定义错误处理中,告诉我只有当控件传递方法为server.transfer时,会话才可用,这是我假定在hood下使用的responseRewith。显然情况并非如此。

    1 回复  |  直到 15 年前
        1
  •  5
  •   Josh    15 年前

    我还不知道问题的答案,但为了克服它,我从web配置中去掉了redirectMode属性,并将自定义逻辑放到global.asax中。 Application_Error 做我想做的。我将用“用户友好”的消息异常替换异常,但本质上传输逻辑是:

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

    然后,error.aspx页面具有页面加载代码,可以将错误从上下文中拉出来并显示消息。