在web.config文件中已经添加了如下的配置项,但是出错后,还是跳转到了系统内置的500错误页
<customErrors mode="On" >
<error statusCode="404" redirect="/BD/HandleException/NoFound" />
<error statusCode="500" redirect="/BD/HandleException/ErrorView" />
</customErrors>,谢谢了
定义一个全局异常过滤器
<customErrors mode="On" defaultRedirect="GenericErrorPage.htm"> <error statusCode="404" redirect="404.htm" /> <error statusCode="500" redirect="500.htm" /> </customErrors>
加上defaultRedirect,而且建议是静态页,有可能是你下面的错误页又出错了
一楼说的对,实现一个过滤器,在过滤器中出现错误进行跳转,在Global.asax RegisterGlobalFilters方法注册自己实现的过滤器
过滤器是不够滴,配置也不是楼上那么写(你们的写法是传统asp.net的).写我的给你参考下,这个绝对正解.
public class Errorfilter : HandleErrorAttribute { public override void OnException(ExceptionContext filterContext) { string a = HttpContext.Current.Response.StatusCode.ToString(); if (HttpContext.Current.Response.StatusCode != 200 || HttpContext.Current.Response.StatusCode != 304) { HttpContext.Current.Response.Redirect("/Error/Error"); } base.OnException(filterContext); } }
system.webServer里面添加
<!--不加 <clear/>的话会出现"无法访问请求的页面,因为该页的相关配置数据无效。"这个错误--> <httpErrors errorMode="Custom" defaultResponseMode="Redirect"> <clear /> <error statusCode="404" path="/Error/Error" responseMode="Redirect" /> <error statusCode="500" path="/Error/Error" /> </httpErrors>
这样就万无一失了
大神,我试过了啊,还是不行的啊,出错之后,还是跳不到500页面那里去,现在页面找不到也跳不到404页面去了,我已经在global.asax.cs文件中添加了这个过滤器,也按照你给的配置以及代码尝试了,不知道为啥还是不行了,谢谢指教了啊
public static void RegisterGlobalFilters(GlobalFilterCollection filters)
{
//filters.Add(new HandleErrorAttribute(), 1);
filters.Add(new ErrorFilter());
}
@骑蜗牛行天下: global是来注册事件的。我觉得是你路由问题,你看看按你那个相对路径能直接访问错误页面不。我当时是建Error控制器下的Erroraction。
@骑蜗牛行天下: 直接访问不到的话那应该是你路由映射不到。要么你写多个路由,要么你就像我那样建多一个控制器,把错误页放在对应的view里