2

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

像这样:

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

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

我使用ResponseRewrite而不使用的原因ResponseRedirect是因为我Exception id使用 elmah 通过了 Items。

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

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

4

1 回答 1

3

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

我在这里找到了解决问题的解决方法。您需要redirectMode从 web.config 中删除 并在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;    
}
于 2013-05-27T19:08:28.930 回答