简介

异常过滤器,顾名思义,就是当程序发生异常时所使用的过滤器。用于在系统出现未捕获异常时的处理。

实现一个自定义异常过滤器

自定义一个异常过滤器需要实现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错误,并且返回自定义的错误信息。

参考博文:https://www.cnblogs.com/huanent/p/7420039.html

转载于:https://www.cnblogs.com/fei686868/p/10470485.html

asp.net core MVC 过滤器之ExceptionFilter过滤器(一)相关推荐

  1. asp.net core MVC 过滤器之ActionFilter过滤器(二)

    简介 Action过滤器将在controller的Action执行之前和之后执行相应的方法. 实现一个自定义Action过滤器 自定义一个全局异常过滤器需要实现IActionFilter接口 publ ...

  2. c#mvc过滤器之系统过滤器

    系统过滤器ActionName过滤器 [ActionName("Test")] 替换第一个视图为Test 在使用原视图会找不到路径相当于Index视图被覆盖了. 把路径改为Test ...

  3. ASP.NET Core MVC I\/O编程模型

    1.1. I/O编程模型浅析 服务器端编程经常需要构造高性能的IO模型,常见的IO模型有四种: (1)同步阻塞IO(Blocking IO):即传统的IO模型. (2)同步非阻塞IO(Non-bloc ...

  4. ASP.NET Core MVC – Tag Helper 组件

    ASP.NET Core Tag Helpers系列目录,这是第五篇,共五篇: ASP.NET Core MVC – Tag Helpers 介绍 ASP.NET Core MVC – Caching ...

  5. ASP.NET Core MVC 过滤器介绍

    过滤器的作用是在 Action 方法执行前或执行后做一些加工处理.使用过滤器可以避免Action方法的重复代码,例如,您可以使用异常过滤器合并异常处理的代码. 过滤器如何工作? 过滤器在 MVC Ac ...

  6. ASP .NET Core MVC 过滤器之一 ActionFilterAttribute

    .NET Core MVC 登陆或权限过滤器 using Microsoft.AspNetCore.Mvc.Filters; using System.Linq; using Finance.Web. ...

  7. Pro ASP.NET Core MVC(四)【C#关键特征】

    在本章中,我描述了Web应用程序开发中使用的C#特征,这些特征尚未被广泛理解或经常引起混淆. 这不是关于C#的书,但是,我仅为每个特征提供一个简单的例子,以便您可以按照本书其余部分的示例,并在自己的项 ...

  8. 这本694页的程序员砖头书让你精通ASP.NET Core MVC

    ASP.NET Core MVC是一个来自微软的Web应用程序开发框架,它结合了模型-视图-控制器(MVC)体系结构的有效性和整洁性.敏捷开发的想法和技术,以及.NET平台的最佳部分. 1.1 ASP ...

  9. ASP.NET Core MVC 源码学习:详解 Action 的匹配

    前言 在 上一篇 文章中,我们已经学习了 ASP.NET Core MVC 的启动流程,那么 MVC 在启动了之后,当请求到达过来的时候,它是怎么样处理的呢? 又是怎么样把我们的请求准确的传达到我们的 ...

最新文章

  1. PyTorch中的MIT ADE20K数据集的语义分割
  2. java练习:模拟试下你斗地主的洗牌、发牌、看牌功能
  3. 源码编译安装 swoole
  4. tomcat、腾讯云主机和微信
  5. 使用Tkinter的Label组件写一个广告板招租
  6. mybatis=<>的写法
  7. 彭文华:详解数字化转型的破局之道(附直播视频)
  8. web测试和app测试相关
  9. WebView 简介
  10. 零基础学python-Python入门教程完整版(懂中文就能学会)
  11. mysql新建数据库数据类型_数据库Mysql的学习(二)-数据类型和创建
  12. linux下intel安装教程,在64位Ubuntu下安装Intel Fortran 11
  13. python读取lmdb文件_python中读写LMDB数据库
  14. CAN应用层常用协议
  15. 富士相机设置传原图_【富士 X-E3 无反相机使用体验】蓝牙|WIFI|连接|图像传输_摘要频道_什么值得买...
  16. 新疆、内蒙、青海三省区骆驼齐聚柴达木上演“激情与速度”
  17. Android——下载apk文件,并在通知栏显示下载进度
  18. LeetCode1109之航班预订统计(相关话题:差分数组)
  19. K线图的看法实图详解
  20. verify_area

热门文章

  1. Ubuntu18.04 安装Python2.7.6
  2. 移动端https抓包那些事--初级篇
  3. 红茶一杯话Binder
  4. 线程间通讯机制(提高篇)——深入浅出实现原理
  5. Android 热修复 HotFix 混淆apk生成patch包方案
  6. 一行命令搞定node.js 版本安装、升级与卸载
  7. sql语句多个表补齐四位_SQL学习笔记 - CTE通用表表达式和WITH用法
  8. python3 链表_python3实现链表
  9. spring-mybatis.xml 访问html5,Spring mvc无xml配置及利用JdbcTemplate访问数据库
  10. Qt TCP 通讯简单案例