1

我为我的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"] 包含错误对象,但第二次为空。

4

2 回答 2

0

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

Server.Transfer(URL)

或者

Response.redirect(url, false)

为什么Server.Transfer(url)

使用 Server.Transfer 转移到另一个页面可以节省服务器资源。它不是告诉浏览器重定向,而是简单地改变 Web 服务器上的“焦点”并传输请求。这意味着您不会收到那么多的 HTTP 请求,从而减轻了您的 Web 服务器的压力并使您的应用程序运行得更快。

来源在这里

请让我知道其中之一是否适合您。

更新

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

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

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

于 2011-04-23T09:51:01.383 回答
0

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

void Application_Error(object sender, EventArgs e)
{
    if (Context.IsCustomErrorEnabled)
    {
        Response.Redirect("~/Error.aspx");
        **Server.ClearError();**
    }
}
于 2011-04-23T20:58:43.520 回答