【问题标题】:Global.asax Error handling: Quirks of server.transferGlobal.asax 错误处理:server.transfer 的怪癖
【发布时间】:2011-04-06 22:31:51
【问题描述】:

在我的 global.asax 中,我正在检查 404,并按照以下内容转移到 404 错误页面:

    If HTTPExceptionInstance.GetHttpCode = 404 Then

        Server.ClearError()

        Response.TrySkipIisCustomErrors = True
        Response.Status = "404 Not Found"

        Server.Transfer("~/Invalid-Page.aspx")

    End If

问题是,我的 Invalid-page.aspx 使用了一些会话代码 (Session("somevariable")),会抛出异常“会话状态只能在 enableSessionState 为在配置文件或 Page 指令中设置为 true。" 因为我使用的是 server.transfer(我相信这是一个已知问题?)。

如果我使用 Response.Redirect,则没有问题。但是,这意味着错误页面的标题是 200,而不是 404。

最好的解决方法是什么?

【问题讨论】:

    标签: asp.net http-status-code-404 global-asax


    【解决方案1】:

    奇怪! Server.TransferRequest 完全符合我的要求,而不会丢失会话状态!

    【讨论】:

    • 谢谢!这一直困扰着我几个小时。 TransferRequest 的语义与 Transfer 的语义不同(例如,它显然创建了一个新的 HttpContext,因此当前上下文中的任何 Items 都将丢失),但它是丢失会话问题的一个很好的解决方法。
    【解决方案2】:

    检查Invalid.aspx的页面指令中EnableSessionState是否设置为true

    【讨论】:

    • 我已经添加了它,但它没有任何区别。据我了解,问题似乎是由于 server.transfer 引起的,它似乎正在杀死会话......
    猜你喜欢
    • 2011-06-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-26
    • 1970-01-01
    • 2016-04-06
    • 1970-01-01
    • 2010-11-13
    相关资源
    最近更新 更多