介绍

实现需要继承IExceptionFilter 或 IAsyncExceptionFilter。

可用于实现常见的错误处理策略。

使用场景

首先讲一下我们为什么要使用异常过滤器 ,如果业务场景复杂,只使用HttpStatusCode,抛出异常后,后期要加很多字段来描述。

那么这种就比较不适合, 我们就可以自己定义一套规则, 比如返回结果必须是 code, data, Message等那我们就要写一个通用数据model。

public class ApiResult<T>{public int Code { get; set; }public string Message { get; set; }public T Data { get; set; }}

定义一套自己的code标准, 比如1 成功,0 系统异常, 1xx 某类业务, 2xx 某类业务 。

所以我们在抛出异常的时候需要去处理 ,所以异常过滤器就派上用场了,当然还可以用中间件处理异常,这里就不说了!

使用

新建ExceptionFilter 继承IAsyncExceptionFilter

若要处理异常,将 属性 ExceptionHandled 设置为 或 true 分配 Result 属性。

这将停止传播异常。异常筛选器无法将异常转变为“成功”。只有操作筛选器才能执行该转变。

在处理异常的时候获取到context.Exception就能处理不同的异常类型了!

我这里自定义了一个异常类, 当然实际场景中根据业务来新建你们自己的异常类满足需求就行了了!

public class ServicesException : Exception{public override string Message { get; }public ServicesException(string message) : base(message){this.Message = message;}}

ExceptionFilter 类:

public class ExceptionFilter : IAsyncExceptionFilter{public Task OnExceptionAsync(ExceptionContext context){// 如果异常没有被处理则进行处理if (context.ExceptionHandled == false){int code = 0;if (context.Exception is ServicesException){code = 1;}// 定义返回类型var result = new ApiResult<string>{Code = code,Message = context.Exception.Message,Data=""};context.Result = new ContentResult{// 返回状态码设置为200,表示成功StatusCode =(int)HttpStatusCode.OK,// 设置返回格式ContentType = "application/json;charset=utf-8",Content = JsonConvert.SerializeObject(result)};}// 设置为true,表示异常已经被处理了context.ExceptionHandled = true;return Task.CompletedTask;}}

最后我们将异常过滤器注册到全局即可!(局部注册可参看)

.NET Core中行为过滤器ActionFilterAttribute的使用介绍

黑哥聊dotNet,公众号:黑哥聊dotNet.NET Core中行为过滤器ActionFilterAttribute的使用介绍

services.AddControllers(o => o.Filters.Add(typeof(ExceptionFilter)));

测试代码与结果:

.NET Core中异常过滤器ExceptionFilter的使用介绍相关推荐

  1. php 异常错误信息用处,关于PHP中异常错误的处理详细介绍

    1. 错误报告级别 error_reporting()error_reporting(int $level); PHP 5.4 及以上 E_ALL 包含了 E_STRICT. PHP Manual 所 ...

  2. 在ASP.NET Core中使用brotli压缩

    Brotli是一种全新的数据格式,可以提供比Zopfli高20-26%的压缩比.据谷歌研究,Brotli压缩速度同zlib的Deflate实现大致相同,而在Canterbury语料库上的压缩密度比LZ ...

  3. asp.net core MVC 过滤器之ExceptionFilter过滤器(一)

    简介 异常过滤器,顾名思义,就是当程序发生异常时所使用的过滤器.用于在系统出现未捕获异常时的处理. 实现一个自定义异常过滤器 自定义一个异常过滤器需要实现IExceptionFilter接口 publ ...

  4. transactionscope 中的异步 处理 异常_.NET Core中TransactionScope事务处理方法介绍及注意事项...

    作者:依乐祝 原文链接:https://www.cnblogs.com/yilezhu/p/10170712.html 今天在写CzarCms的UnitOfWork的使用使用到了这个Transacti ...

  5. MVC与WebApi中的异常过滤器

    MVC与WebApi中的异常过滤器 参考文章: (1)MVC与WebApi中的异常过滤器 (2)https://www.cnblogs.com/mstmdev/p/5471099.html 备忘一下.

  6. ASP.NET Core 中文文档 第四章 MVC(4.3)过滤器

    原文:Filters 作者:Steve Smith 翻译:刘怡(AlexLEWIS) 校对:何镇汐 ASP.NET MVC 过滤器 可在执行管道的前后特定阶段执行代码.过滤器可以配置为全局有效.仅对控 ...

  7. 如何在 ASP.NET Core 中实现全局异常拦截

    异常是一种运行时错误,当异常没有得到适当的处理,很可能会导致你的程序意外终止,这篇就来讨论一下如何在 ASP.Net Core MVC 中实现全局异常处理,我会用一些 样例代码 和 截图 来说明这些概 ...

  8. 获取异常信息_如何在 ASP.NET Core 中实现全局异常拦截

    异常是一种运行时错误,当异常没有得到适当的处理,很可能会导致你的程序意外终止,这篇就来讨论一下如何在 ASP.Net Core MVC 中实现全局异常处理,我会用一些 样例代码 和 截图 来说明这些概 ...

  9. 无法启动此程序,因为计算机中丢失iathook.dll,通过IAT+Hook调试Windows自定义未处理异常过滤器.pdf...

    2009年第12期 计算机系统应用 Hoo n 通过IAT d k调试Wiows自定义未处理 异常过滤器① WindowsCustomFiltersforUnhandled IATHook Debug ...

最新文章

  1. EntityCURD操作的参数和返回值
  2. 静态Web开发 JQuery
  3. MySQL数据库学习笔记(一)----MySQL 5.6.21的安装和配置(setup版)
  4. 每日干货丨C语言数组知识点总结
  5. 使用@property
  6. matplotlib 绘图代码库(自用)
  7. 如何用深度学习 AI 美颜实现天天 P 图疯狂变脸算法? | 技术头条
  8. Scala 2.8馆藏图书馆是“历史上最长的遗书”吗? [关闭]
  9. R语言向matlab转化,我有一段MATLAB的程序,现在想转换成R语言代码
  10. 〖Python APP 自动化测试实战篇①〗 - 大话闲扯 APP 自动化
  11. treble_Android上的Project Treble是什么,我的手机会收到吗?
  12. python爬虫爬取大学排名并存入数据库进行数据可视化
  13. nvs node版本管理
  14. 用python批量生成有效的IP地址
  15. matlab编写扫雷,【matlab编程】Matlab版扫雷
  16. bread 块设备读取函数解析(1)
  17. 计算机控制技术分辨率的计算,微型计算机控制技术期末复习题
  18. 金蝶EAS补丁部署操作步骤
  19. Luogu 2495 [SDOI2011]消耗战
  20. Axure教程:中继器如何加载显示图片

热门文章

  1. 负载均衡(LB)集群 dr
  2. (2)从实际项目谈起,基于MEF的插件框架之总体设计
  3. Linux查看硬件信息很Easy
  4. NetBeans 6.5 正式发布
  5. 从笑话中看到产品创意
  6. 6月,回忆我失去的爱情
  7. .NET Core 3.0-preview3 发布
  8. ref:下一个项目为什么要用 SLF4J
  9. readonly和const的区别
  10. 【转】SQL SERVER 存储过程学习笔记