简介

异常过滤器,顾名思义,就是当程序发生异常时所使用的过滤器。用于在系统出现未捕获异常时的处理。
实现一个自定义异常过滤器
自定义一个全局异常过滤器需要实现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
# core
# MVC
# 过滤器
# ExceptionFilter
# ASP.NET Core MVC中过滤器工作原理介绍
# ASP.NET Core MVC 过滤器(Filter)
# ASP.NET Core MVC 过滤器的使用方法介绍
# asp.net core MVC 过滤器之ActionFilter过滤
# ASP.NET Core MVC过滤器运行流程解析
# 自定义
# 时就
# 顾名思义
# 错误信息
# 抛出
# 大家多多
# 有一个
# 方法如下
# 包含了
# 请重试
# _env
# _loggerFactory
# IHostingEnvironment
# gt
# summary
# ILoggerFactory
# readonly
# loggerFactory
# TargetSite
# Exception
相关文章:
Swift中循环语句中的转移语句 break 和 continue
行程制作网站有哪些,第三方机票电子行程单怎么开?
如何在阿里云虚拟主机上快速搭建个人网站?
公众号网站制作网页,微信公众号怎么制作?
javascript基本数据类型及类型检测常用方法小结
c++怎么使用类型萃取type_traits_c++ 模板元编程类型判断【方法】
如何访问已购建站主机并解决登录问题?
娃派WAP自助建站:免费模板+移动优化,快速打造专业网站
建站之星代理如何获取技术支持?
想学网站制作怎么学,建立一个网站要花费多少?
网站制作公司排行榜,四大门户网站排名?
如何选择域名并搭建高效网站?
建站之星安装需要哪些步骤及注意事项?
建站之星如何快速更换网站模板?
网站制作的软件有哪些,制作微信公众号除了秀米还有哪些比较好用的平台?
建站主机如何选?性能与价格怎样平衡?
c++ stringstream用法详解_c++字符串与数字转换利器
唐山网站制作公司有哪些,唐山找工作哪个网站最靠谱?
如何通过VPS建站实现广告与增值服务盈利?
C++如何使用std::optional?(处理可选值)
怀化网站制作公司,怀化新生儿上户网上办理流程?
天河区网站制作公司,广州天河区如何办理身份证?需要什么资料有预约的网站吗?
建站之星后台管理系统如何操作?
湖南网站制作公司,湖南上善若水科技有限公司做什么的?
开源网站制作软件,开源网站什么意思?
专业网站制作服务公司,有哪些网站可以免费发布招聘信息?
天津个人网站制作公司,天津网约车驾驶员从业资格证官网?
专业的网站制作设计是什么,如何制作一个企业网站,建设网站的基本步骤有哪些?
如何在云虚拟主机上快速搭建个人网站?
微网站制作教程,不会写代码,不会编程,怎么样建自己的网站?
宝华建站服务条款解析:五站合一功能与SEO优化设置指南
代购小票制作网站有哪些,购物小票的简要说明?
如何在自有机房高效搭建专业网站?
建站之星安全性能如何?防护体系能否抵御黑客入侵?
如何高效配置IIS服务器搭建网站?
电商网站制作价格怎么算,网上拍卖流程以及规则?
重庆市网站制作公司,重庆招聘网站哪个好?
手机钓鱼网站怎么制作视频,怎样拦截钓鱼网站。怎么办?
如何选择靠谱的建站公司加盟品牌?
如何通过多用户协作模板快速搭建高效企业网站?
移民网站制作流程,怎么看加拿大移民官网?
微信小程序 五星评分(包括半颗星评分)实例代码
建站之星如何取消后台验证码生成?
怎么制作网站设计模板图片,有电商商品详情页面的免费模板素材网站推荐吗?
魔方云NAT建站如何实现端口转发?
5种Android数据存储方式汇总
如何破解联通资金短缺导致的基站建设难题?
如何用搬瓦工VPS快速搭建个人网站?
如何在新浪SAE免费搭建个人博客?
如何续费美橙建站之星域名及服务?
*请认真填写需求信息,我们会在24小时内与您取得联系。