asp.net customErrors redirectMode ResponseRewrite失效显示默认错误

  asp.net配置web.config的customErrors的redirectMode为ResponseRewrite,配置的页面如果为aspx动态页时,发现没有执行定义的错误页面,而是显示了默认的编译错误信息或者404错误信息【信息内容根据mode的设置有所不同】。

customErrors redirectMode ResponseRewrite显示默认错误

  但是同服务器的其他站点,如本站,同样配置web.config的customErrors的redirectMode为ResponseRewrite,当访问不存在的页面的时候,不会显示如上图所示的错误,而是转向了自定义的错误页面。

  网上找了下,当设置redirectMode="ResponseRewrite",发生错误时,ASP.NET实际会执行Server.Transfer()返回定制错误信息页面,但是asp.net 3.5中Server.Transfer()与ASP.NET MVC路由存在兼容问题,详见CustomErrors does not work when setting redirectMode=“ResponseRewrite”

  那篇英文文章中的解决办法是将错误页面转向静态页面,这样就不走asp.net的mvc路由器了,但是使用静态页会出现一个问题,如果是找不到页面,实际返回的状态码不是404,而是200,这个非常不利于seo,具体参考:自定义404错误对seo的影响。

customErrors redirectMode ResponseRewrite显示默认错误

  既然静态页面能实现转向,那么配置为asp不知道行不行。经测试,配置错误页为asp和配置为aspx一样,显示的还是默认错误,而不是自定义的错误页面。

 

  后面在博客园找到了一篇文章也是出现这个问题,使用global.asax来实现自定义错误,解决了这个问题。

引自:http://blublu.me/news/detail/177122
既然CustomErrors解决不了问题,那我们就把它给废了:

<customErrors mode="Off">
</customErrors>

然后自己处理定制错误信息,在Global.asax.cs中添加如下的代码:

protected void Application_Error(Object sender, EventArgs e)
{
Exception lastError = Server.GetLastError();
if (lastError != null)
{
Response.StatusCode = 500;
Response.WriteFile("~/error/error.htm");
Server.ClearError();
}
}

 

加支付宝好友偷能量挖...


原创文章,转载请注明出处:asp.net customErrors redirectMode ResponseRewrite失效显示默认错误

评论(0)Web开发网
阅读(245)喜欢(0)Asp.Net/C#/WCF