ResponseRewrite后,Session为空

时间:2013-05-06 11:08:03

标签: c# asp.net web-config elmah

我正在使用web.config中的自定义错误属性来处理自定义错误

喜欢这样:

<customErrors mode="On" defaultRedirect="~/Error.aspx" redirectMode="ResponseRewrite" />

抛出错误后,页面将重定向到错误页面,但是当我在错误页面中访问会话时,它为空。

我使用ResponseRewrite而非ResponseRedirect的原因是因为我使用elmah将Exception id传递给了项目。

我甚至尝试创建新的空asp.net网站,但它仍然会发生。

我看过一些类似的问题,但没有答案。

1 个答案:

答案 0 :(得分:2)

我重现了这个问题,但我无法理解为什么会这样。在Application_Error处理程序中,我可以访问Session变量,但是当页面加载时,它变为null

我找到了解决问题的解决方法here。您需要从web.config中删除redirectMode,并在出现错误时手动执行Server.Transfer。所以这是web.config:

<customErrors mode="On" defaultRedirect="~/Error.aspx"/>

并将其添加到Global.asax.cs文件中:

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

要根据错误指定不同的错误页面,您可以访问错误代码,如下所示:

HttpException httpException = (HttpException) Server.GetLastError();
int httpCode = httpException.GetHttpCode();
switch (httpCode)
{
  case 500: Server.Transfer("~/Pages/Error.aspx");break;
  case 404: Server.Transfer("~/Pages/PageNotFound.aspx");break;
  default: Server.Transfer("~/Pages/Error.aspx");break;    
}