本系类将会解说asp.net core MVC中的内置全局过滤器的运用,将分为以下章节
asp.net core MVC 过滤器之ExceptionFilter过滤器(一)
asp.net core MVC 过滤器之ActionFilter过滤器(二)
asp.net core MVC 过滤器之ResultFilter过滤器(三)
asp.net core MVC 过滤器之ResourceFilter过滤器(四)
asp.net core MVC 过滤器之AuthorizationFilter过滤器(五)
简介
非常过滤器,望文生义,就是当顺序发作非常时所运用的过滤器。用于在体系涌现未捕捉非常时的处置惩罚。
完成一个自定义非常过滤器
自定义一个全局非常过滤器须要完成IExceptionFilter接口
public class HttpGlobalExceptionFilter : IExceptionFilter { public void OnException(ExceptionContext context) { throw new NotImplementedException(); } }
IExceptionFilter接口会要求完成OnException要领,当体系发作未捕捉非常时就会触发这个要领。OnException要领有一个ExceptionContext非常上下文,个中包含了详细的非常信息,HttpContext及mvc路由信息。体系一旦涌现未捕捉非常后,比较罕见的做法就是运用日记东西,将非常的细致信息纪录下来,轻易修正调试。下面是日记纪录的完成。
/// <summary> /// 全局非常过滤器 /// </summary> public class HttpGlobalExceptionFilter : IExceptionFilter { readonly ILoggerFactory _loggerFactory; readonly IHostingEnvironment _env; public HttpGlobalExceptionFilter(ILoggerFactory loggerFactory, IHostingEnvironment env) { _loggerFactory = loggerFactory; _env = env; } public void OnException(ExceptionContext context) { var logger = _loggerFactory.CreateLogger(context.Exception.TargetSite.ReflectedType); logger.LogError(new EventId(context.Exception.HResult), context.Exception, context.Exception.Message); var json = new ErrorResponse("未知毛病,请重试"); if (_env.IsDevelopment()) json.DeveloperMessage = context.Exception; context.Result = new ApplicationErrorResult(json); context.HttpContext.Response.StatusCode = (int)HttpStatusCode.InternalServerError; context.ExceptionHandled = true; } public class ApplicationErrorResult : ObjectResult { public ApplicationErrorResult(object value) : base(value) { StatusCode = (int)HttpStatusCode.InternalServerError; } } public class ErrorResponse { public ErrorResponse(string msg) { Message = msg; } public string Message { get; set; } public object DeveloperMessage { get; set; } }
注册全局过滤器
过滤器已编写终了,接下来就须要在asp.net core MVC中注册。找到体系根目录Startup.cs文件,修正ConfigureServices要领以下
services.AddMvc(options => { options.Filters.Add<HttpGlobalExceptionFilter>(); });
测试
在要求中抛出一个非常
日记准确捕捉到非常信息
浏览器返回500毛病,而且返回自定义的毛病信息。
以上就是asp.net之ExceptionFilter过滤器的细致内容,更多请关注ki4网别的相干文章!