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>(); });