本文摘自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 core mvc中如何把二级域名绑定到特定的控制器上
学习asp.net的学习顺序与学习内容分享
关于asp.net core网站在docker中运行的详解
asp.net中webform的生命周期相关讲解
学习asp.net core 2遇到的问题分享
asp.net之ExceptionFilter过滤器
asp.net异步触发用法(ajax)
asp.net core环境设置教程(2)_实用技巧
asp.net mvc 4 中的json数据交互的方法
更多相关阅读请进入《ExceptionFilter》频道 >>
清华大学出版社
作者:[美]克里斯琴·内格尔(Christian Nagel)著。出版时间:2019年3月。
转载请注明出处:木庄网络博客 » asp.net之ExceptionFilter过滤器