我正在使用web.config中的自定义错误属性来处理自定义错误
喜欢这样:
<customErrors mode="On" defaultRedirect="~/Error.aspx" redirectMode="ResponseRewrite" />
抛出错误后,页面将重定向到错误页面,但是当我在错误页面中访问会话时,它为空。
我使用ResponseRewrite
而非ResponseRedirect
的原因是因为我使用elmah将Exception id
传递给了项目。
我甚至尝试创建新的空asp.net网站,但它仍然会发生。
我看过一些类似的问题,但没有答案。
答案 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;
}