zoukankan      html  css  js  c++  java
  • .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>();
                });
  • 相关阅读:
    【2017 Multi-University Training Contest
    【CS Round #39 (Div. 2 only) D】Seven-segment Display
    【CS Round #39 (Div. 2 only) C】Reconstruct Sum
    【CS Round #39 (Div. 2 only) B】Circle Elimination
    【CS Round #39 (Div. 2 only) A】Removed Pages
    【Uva 10163】Storage Keepers
    【Uva 1632】Alibaba
    【2017 Multi-University Training Contest
    Network Function Virtualization for a Network Device
    C#程序集相关的概念
  • 原文地址:https://www.cnblogs.com/ZhengHengWU/p/12768499.html
Copyright © 2011-2022 走看看