宣告:本方式適用於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方法,然後就可以記錄異常日誌和傳送郵件通知到相關人員了。