.NET Core[MVC] 利用特性捕捉異常

大穩·楊發表於2018-06-26

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

相關文章