asp.net core MVC 过滤器之ExceptionFilter过滤器(一)
简介
异常过滤器,顾名思义,就是当程序发生异常时所使用的过滤器。用于在系统出现未捕获异常时的处理。
实现一个自定义异常过滤器
自定义一个异常过滤器需要实现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;}}
注册全局过滤器
过滤器已经编写完毕,接下来就需要在asp.net core MVC中注册。找到系统根目录Startup.cs文件,修改ConfigureServices方法如下
services.AddMvc(options =>{options.Filters.Add<HttpGlobalExceptionFilter>();});
测试
在请求中抛出一个异常
日志正确捕获到异常信息
浏览器返回500错误,并且返回自定义的错误信息。
参考博文:https://www.cnblogs.com/huanent/p/7420039.html
转载于:https://www.cnblogs.com/fei686868/p/10470485.html
asp.net core MVC 过滤器之ExceptionFilter过滤器(一)相关推荐
- asp.net core MVC 过滤器之ActionFilter过滤器(二)
简介 Action过滤器将在controller的Action执行之前和之后执行相应的方法. 实现一个自定义Action过滤器 自定义一个全局异常过滤器需要实现IActionFilter接口 publ ...
- c#mvc过滤器之系统过滤器
系统过滤器ActionName过滤器 [ActionName("Test")] 替换第一个视图为Test 在使用原视图会找不到路径相当于Index视图被覆盖了. 把路径改为Test ...
- ASP.NET Core MVC I\/O编程模型
1.1. I/O编程模型浅析 服务器端编程经常需要构造高性能的IO模型,常见的IO模型有四种: (1)同步阻塞IO(Blocking IO):即传统的IO模型. (2)同步非阻塞IO(Non-bloc ...
- ASP.NET Core MVC – Tag Helper 组件
ASP.NET Core Tag Helpers系列目录,这是第五篇,共五篇: ASP.NET Core MVC – Tag Helpers 介绍 ASP.NET Core MVC – Caching ...
- ASP.NET Core MVC 过滤器介绍
过滤器的作用是在 Action 方法执行前或执行后做一些加工处理.使用过滤器可以避免Action方法的重复代码,例如,您可以使用异常过滤器合并异常处理的代码. 过滤器如何工作? 过滤器在 MVC Ac ...
- ASP .NET Core MVC 过滤器之一 ActionFilterAttribute
.NET Core MVC 登陆或权限过滤器 using Microsoft.AspNetCore.Mvc.Filters; using System.Linq; using Finance.Web. ...
- Pro ASP.NET Core MVC(四)【C#关键特征】
在本章中,我描述了Web应用程序开发中使用的C#特征,这些特征尚未被广泛理解或经常引起混淆. 这不是关于C#的书,但是,我仅为每个特征提供一个简单的例子,以便您可以按照本书其余部分的示例,并在自己的项 ...
- 这本694页的程序员砖头书让你精通ASP.NET Core MVC
ASP.NET Core MVC是一个来自微软的Web应用程序开发框架,它结合了模型-视图-控制器(MVC)体系结构的有效性和整洁性.敏捷开发的想法和技术,以及.NET平台的最佳部分. 1.1 ASP ...
- ASP.NET Core MVC 源码学习:详解 Action 的匹配
前言 在 上一篇 文章中,我们已经学习了 ASP.NET Core MVC 的启动流程,那么 MVC 在启动了之后,当请求到达过来的时候,它是怎么样处理的呢? 又是怎么样把我们的请求准确的传达到我们的 ...
最新文章
- PyTorch中的MIT ADE20K数据集的语义分割
- java练习:模拟试下你斗地主的洗牌、发牌、看牌功能
- 源码编译安装 swoole
- tomcat、腾讯云主机和微信
- 使用Tkinter的Label组件写一个广告板招租
- mybatis=<>的写法
- 彭文华:详解数字化转型的破局之道(附直播视频)
- web测试和app测试相关
- WebView 简介
- 零基础学python-Python入门教程完整版(懂中文就能学会)
- mysql新建数据库数据类型_数据库Mysql的学习(二)-数据类型和创建
- linux下intel安装教程,在64位Ubuntu下安装Intel Fortran 11
- python读取lmdb文件_python中读写LMDB数据库
- CAN应用层常用协议
- 富士相机设置传原图_【富士 X-E3 无反相机使用体验】蓝牙|WIFI|连接|图像传输_摘要频道_什么值得买...
- 新疆、内蒙、青海三省区骆驼齐聚柴达木上演“激情与速度”
- Android——下载apk文件,并在通知栏显示下载进度
- LeetCode1109之航班预订统计(相关话题:差分数组)
- K线图的看法实图详解
- verify_area
热门文章
- Ubuntu18.04 安装Python2.7.6
- 移动端https抓包那些事--初级篇
- 红茶一杯话Binder
- 线程间通讯机制(提高篇)——深入浅出实现原理
- Android 热修复 HotFix 混淆apk生成patch包方案
- 一行命令搞定node.js 版本安装、升级与卸载
- sql语句多个表补齐四位_SQL学习笔记 - CTE通用表表达式和WITH用法
- python3 链表_python3实现链表
- spring-mybatis.xml 访问html5,Spring mvc无xml配置及利用JdbcTemplate访问数据库
- Qt TCP 通讯简单案例