本文摘自PHP中文网,作者巴扎黑,侵删。
这篇文章主要为大家详细介绍了asp.net core MVC 全局过滤器之ExceptionFilter过滤器,具有一定的参考价值,感兴趣的小伙伴们可以参考一下本系类将会讲解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接口
1 2 3 4 5 6 7 | public class HttpGlobalExceptionFilter : IExceptionFilter
{
public void OnException(ExceptionContext context)
{
throw new NotImplementedException();
}
}
|
IExceptionFilter接口会要求实现OnException方法,当系统发生未捕获异常时就会触发这个方法。OnException方法有一个ExceptionContext异常上下文,其中包含了具体的异常信息,HttpContext及mvc路由信息。系统一旦出现未捕获异常后,比较常见的做法就是使用日志工具,将异常的详细信息记录下来,方便修正调试。下面是日志记录的实现。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 | /// <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方法如下
1 2 3 4 | services.AddMvc(options =>
{
options.Filters.Add<HttpGlobalExceptionFilter>();
});
|
测试
在请求中抛出一个异常

日志正确捕获到异常信息

浏览器返回500错误,并且返回自定义的错误信息。

以上就是asp.net之ExceptionFilter过滤器的详细内容!
相关阅读 >>
分享一个asp.net实现多个文件同时下载的方法
asp.net mvc 使用bootstrap方法介绍
关于core mvc压缩样式的实例详解(asp)
学习asp.net core 2遇到的问题分享
使用action的模型绑定实例教程
实现asp.net返回上一页有哪些实例?
分享asp.net学习笔记(3)webpages 布局
《asp.net》数据的绑定―repeater图文详解
介绍asp.net的几种分页方式
关于asp.net中的mvc介绍
更多相关阅读请进入《ExceptionFilter》频道 >>
清华大学出版社
作者:[美]克里斯琴·内格尔(Christian Nagel)著。出版时间:2019年3月。
转载请注明出处:木庄网络博客 » asp.net之ExceptionFilter过滤器