【问题标题】:HttpContext.current.Session is cleared in error pageHttpContext.current.Session 在错误页面中被清除
【发布时间】:2011-08-11 09:58:22
【问题描述】:

我为我的 ASP.NET 4 应用程序制作了一个自定义错误页面。我将异常对象放在HttpContext.current.Session["CustomError"] 中,但是当用户被重定向到错误页面时HttpContext.current.Session["CustomError"]null。 我在 CustomError 类构造函数中这样做:

public CustomError(enExceptionType ExceptionType) : base(ExceptionMessage(ExceptionType)) { 
    HttpContext.Current.Session["CustomError"] = this; 
}

当我跳过代码时,Session["Error"] 包含错误对象。 有什么想法吗?

更新:

我从 web.config 中删除了自定义错误页面并将其添加到 glabal.asax:

void Application_Error(object sender, EventArgs e)
{
    if (Context.IsCustomErrorEnabled)
    {
        Response.Redirect("~/Error.aspx");
    }
}

通过单步执行此函数,我注意到当抛出异常时,此函数被调用两次,第一次 Session["CustiomError"] 包含错误对象,但第二次为 null。

【问题讨论】:

  • 你想用自定义错误会话实现什么,如果你想记录它,你可以使用全局 asax 中的 application_error 事件
  • 我想在错误页面显示自定义错误对象的错误信息。
  • 你能把代码放在你分配异常的地方吗?
  • 我更新了帖子并添加了代码
  • @nima 你确定在你填写异常值之后重定向就完成了吗?

标签: asp.net session-variables custom-error-pages


【解决方案1】:

这解决了问题,但如果有人告诉我原因,我将不胜感激:)

void Application_Error(object sender, EventArgs e)
{
    if (Context.IsCustomErrorEnabled)
    {
        Response.Redirect("~/Error.aspx");
        **Server.ClearError();**
    }
}

【讨论】:

    【解决方案2】:

    不要使用Response.redirect(URL)(我假设你的代码中有)使用

    Server.Transfer(URL)

    Response.redirect(url, false)

    为什么是Server.Transfer(url)

    使用转移到另一个页面 Server.Transfer 保存服务器 资源。而不是告诉 浏览器重定向,它只是改变 Web 服务器上的“焦点”和 传输请求。这意味着你 没有收到那么多的 HTTP 请求 通过,从而缓解 您的 Web 服务器上的压力和 让您的应用程序运行得更快。

    来源here

    如果其中一种方法适合您,请告诉我。

    更新

    如果您使用网络配置设置,您可以尝试将 ResponseWrite 值添加到重定向模式变量吗?

    <customErrors mode="RemoteOnly" defaultRedirect="~/errors/GeneralError.aspx" redirectMode="ResponseRewrite" />
    

    如果这仍然不起作用,我建议实施this(我已经在我的应用程序中将错误记录在日志文件中(对于我作为管理员),并且向用户显示一般错误)。

    【讨论】:

    • 我不使用 Response.Redirect。我已经在 web.config 中定义了自定义错误页面,并且用户会自动重定向到异常错误页面。
    • 当我添加 ResponseRewrite 时,当我想在错误页面中访问 Session 时抛出异常:会话状态只能在 enableSessionState 设置为 true 时使用,无论是在配置文件中还是在 Page 指令中.还请确保 System.Web.SessionStateModule 或自定义会话状态模块包含在应用程序配置的 \\ 部分中。
    • @nima 如果你的 web.config 中有这个:&lt;pages enableSessionState="true" /&gt;,你应该不会遇到这样的问题。 (来源google.ro/…
    • 我在 web.config 和错误页面本身中有 enableSessionState="true" 但是当我添加 redirectMode="ResponseRewrite" 时抛出异常。
    • @nima 此解决方案是否适用于您的最后一个错误? stackoverflow.com/questions/781861/…
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-05-19
    • 1970-01-01
    • 2023-03-18
    • 1970-01-01
    相关资源
    最近更新 更多