在错误页面中清除HttpContext.current.Session

时间:2011-04-23 08:36:23

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

我为 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。

2 个答案:

答案 0 :(得分:0)

不使用Response.redirect(URL)(我假设您在代码中使用),而是使用

Server.Transfer(URL)

Response.redirect(url, false)

为什么Server.Transfer(url)

  

使用转移到另一个页面   Server.Transfer节省服务器   资源。而不是告诉   浏览器重定向,它只是改变   Web服务器上的“焦点”和   转移请求。这意味着你   不要获得尽可能多的HTTP请求   通过,因此缓和   Web服务器上的压力和   使您的应用程序运行得更快。

来源here

如果其中一项适合您,请告诉我。

<强>更新

如果使用Web配置设置,可以尝试将ResponseWrite值添加到redirectmode var?

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

如果这仍然不起作用,我建议实施this(我已经在我的应用程序中完成了记录日志文件中的错误(对我来说是管理员)和给出了一个通用错误用户)。

答案 1 :(得分:0)

这解决了这个问题,但如果有人告诉我原因,我会很感激。)

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