聲明:本方式適用於MVC。本代碼只適用於.NET Core MVC.
先創建一個類繼承ExceptionFilterAttribute這個抽象類,並override它的方法OnException。
代碼如下:
/// <summary> /// 處理錯誤信息 /// </summary> public class ErrorHandleAttribute : ExceptionFilterAttribute { public override void OnException(ExceptionContext filterContext) { //獲取異常信息,入庫保存 var exception = filterContext.Exception; var controllerName = filterContext.RouteData.Values["controller"].ToString(); var actionName = filterContext.RouteData.Values["action"].ToString(); var msg = $"出錯位置:{controllerName}/{actionName}----出錯時間:{DateTime.Now:yyyy-MM-dd HH:mm:ss:fff}"; Log4NetHelp.Error(msg, exception);//記錄異常日志到本地磁盤 filterContext.Result = new RedirectResult("/Home/Error"); EmailHelper.SendMail(exception);//發送郵件通知到相關人員 base.OnException(filterContext); } }
如何使用呢?
只需要在需要捕捉異常的控制器加上[ErrorHandle]即可。
例如:
[ErrorHandle] public abstract class AdminControllerBase : Controller { //代碼邏輯 }
如果繼承AdminControllerBase或者帶有[ErrorHandle]特性的類和方法出現了錯誤,都會執行OnException方法,然后就可以記錄異常日志和發送郵件通知到相關人員了。