在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需自己加上即可。