.NET Core通過異常過濾器(ExceptionFilterAttribute)實現全局異常捕獲和日志記錄


1.一共有五類過濾器IAsyncAuthorizationFilter  IAsyncResourceFilter   IAsyncActonFilter  IAsyncExceptionFilter    IAsyncResultFilter 去掉Async就是同步的

2.注冊過濾器  全局注冊和Attribute注冊 用在特定的Action上

通過ExceptionFilterAttribute過濾器實現全局異常處理

(1)新建ErrorFilterAttribute.cs文件繼承ExceptionFilterAttribute類,實現OnException方法

        /// <summary>
        /// 處理異常信息
        /// </summary>
        /// <param name="context"></param>
        public override void OnException(ExceptionContext context)
        {
            ContentResult result = new ContentResult
            {
                StatusCode = 500,
                ContentType = "application/json; charset=utf-8"
            };

            var error = new ErrorEntity
            {
                CreateDate = DateTime.Now,
                DealData = "",
                ErrorFrom = ErrorFrom.Site,
                Exception = context.Exception.ToString(),
                IsSolved = false,
                OsInfo = Environment.OSVersion.Platform.ToString(),
                Solution = "",
                SolvedBy = "",
                UserId = context.HttpContext.AuthenticateAsync().Result.Principal.CurUserID(),
                Version = "1.0.0",
                StackTrace = context.Exception.StackTrace
            };
            var thread = new Thread(AddError);
            thread.Start(error);

            result.Content = JsonConvert.SerializeObject(new MethodResult(context.Exception.Message));
            context.Result = result;
            context.ExceptionHandled = true;
            context.HttpContext.Response.StatusCode = (int)HttpStatusCode.InternalServerError;
        }

(2) 異常寫入數據庫中

        /// <summary>
        /// 異步保存異常信息
        /// </summary>
        /// <param name="obj"></param>
        public void AddError(object obj)
        {
            var error = obj as ErrorEntity;
            if (error == null) return;
            var service = new ErrorService();
            service.AddError(error);
        }

(3) 在Startup=》ConfigureServices方法中全局注冊異常過濾器ErrorFilterAttribute

services.AddMvc(opt =>
            {
                opt.Filters.Add<ErrorFilterAttribute>();
            });

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM