2011-04-23 18 views
1

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

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

当我迈过码会话[“错误”]包含错误的对象。 有什么想法?

UPDATE:

我删除了从web.config中的自定义错误页,并已将此添加glabal.asax:

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

通过这个功能我注意到,当一个异常被抛出此功能是步进称为两次,第一次Session [“CustiomError”]包含错误对象,但第二次为空。

+0

要实现与自定义错误会话,如果你想记录它做什么,你可以使用我将不胜感激全局asax中的application_error事件 – Ivo 2011-04-23 08:46:00

+0

我想在错误页面上显示自定义错误对象的错误信息。 – nima 2011-04-23 08:47:56

+0

你可以把代码放在你指定异常的地方吗? – 2011-04-23 08:55:08

回答

0

这解决了这个问题,但如果有人告诉我,为什么:)

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

而不是使用Response.redirect(URL)(我假设你已经在你的代码)使用

Server.Transfer(URL)

Response.redirect(url, false)

为什么Server.Transfer(url)的?

传输到使用 Server.Transfer的另一页节省服务器资源 。而不是告知 浏览器重定向,它只是将 更改为Web服务器上的“焦点”,而 则传输请求。这意味着你的 没有得到很多HTTP请求 ,因此减轻了你的Web服务器和 的压力,使你的应用程序运行得更快。

来源here

请让我知道,如果其中一个适合你。

UPDATE

如果您使用的web配置设置可以尝试添加ResponseWrite价值redirectmode VAR?

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

如果这仍然没有工作,我建议实行this(我在我的应用登录日志文件中的错误做了(我为admin)和存在一个通用的错误给用户 )。

+0

我不使用Response.Redirect。我在web.config中定义了自定义错误页面,并且用户被自动重定向到异常错误页面。 – nima 2011-04-23 10:07:13

+0

@nima然后,你可以尝试我的更新? – 2011-04-23 10:13:51

+0

当我添加ResponseRewrite时,当我想访问错误页面中的Session时抛出异常: 会话状态只能在enableSessionState设置为true(无论是在配置文件中还是在Page指令中)时使用。另请确保System.Web.SessionStateModule或自定义会话状态模块包含在应用程序配置的 \ \ 部分中。 – nima 2011-04-23 10:21:22