在Global.asax文件中
可以看到系统异常处理的捕获:
public static void RegisterGlobalFilters(GlobalFilterCollection filters) { filters.Add(new HandleErrorAttribute()); }
我们需要重写这个捕获方法
1、重写HandleErrorAttribute
/// <summary> /// 错误日志(Controller发生异常时会执行这里) /// </summary> public class AppHandleErrorAttribute : HandleErrorAttribute { /// <summary> /// 异常 /// </summary> /// <param name="filterContext"></param> public override void OnException(ExceptionContext filterContext) { //使用log4net或其他记录错误消息 Exception Error = filterContext.Exception; string Message = Error.Message;//错误信息 string Url = HttpContext.Current.Request.RawUrl;//错误发生地址 filterContext.ExceptionHandled = true; filterContext.Result = new RedirectResult("/SiteStatus/HtmlError500/?q=" + Message);//跳转至错误提示页面 } }
2、使用重写后的HandleAttribute
更改系统注册方法:
public static void RegisterGlobalFilters(GlobalFilterCollection filters) { filters.Add(new AppHandleErrorAttribute()); }
以上方法就完成了对500错误异常的捕获。
若还需要捕获404错误,则可以使用web.config文件来设置,因为404可以无需记录详细消息。
<customErrors mode="On" > <error statusCode="404" redirect="~/SiteStatus/HtmlError404?404"/> </customErrors>
相应的Controller和View需自己加上即可。