一、简要说明

【项目源码】

【章节目录】

  前面我们已经初步完成了框架的功能了,jwt的也已经接入完成了。

  现在需要进行全局异常的接入了,abpvnext官方本来就有了全局异常的模块了,介绍链接。但是我自己感觉那个并不是很符合我自己的开发标准,因此需要替换掉他们的异常处理,变成由我们自己输出的形式,且记录日志。

  替换之前,首先我们需要知道的是在netcore中,若要定义自己的异常filter是需要继承IExceptionFilter的,并在Starup里面去注入。因此AbpExceptionFilter也是继承IExceptionFilter的。因此它也属于filter中的一种。其次netcore项目中,filter是可以通过MvcOptions中的options.Filters去获取到所有的注入的filter的。因此我们需要把AbpExceptionFilter找出来,并移除,然后再添加我们自己注入的ExceptionFilter就可以了。具体看以下步骤吧:

二、具体步骤

2.1、 首先我们在Host的Module中的ConfigureServices里面添加以下的代码把AbpExceptionFilter从filter中找出来,然后移除:

 Configure<MvcOptions>(options =>
{
var index = options.Filters.ToList().FindIndex(filter => filter is ServiceFilterAttribute attr && attr.ServiceType.Equals(typeof(AbpExceptionFilter)));
if (index > -1)
options.Filters.RemoveAt(index);
});

2.2、 定义好我们的LeanGlobalExceptionFilter并继承IExceptionFilter,实现相应的方法,如下:

public class LeanGlobalExceptionFilter: IExceptionFilter
{
private readonly ILogger<LeanGlobalExceptionFilter> logger; public LeanGlobalExceptionFilter( ILogger<LeanGlobalExceptionFilter> logger)
{
this.logger = logger;
} public void OnException(ExceptionContext context)
{
logger.LogError(new EventId(context.Exception.HResult),
context.Exception,
context.Exception.Message);
context.Result = new JsonResult(new{ code = 500, err = "系统异常" });
context.ExceptionHandled = true;
}
}

2.3、回到Host的Module中,在除去AbpExceptionFilter的后面添加我们自己的filter,如下

 Configure<MvcOptions>(options =>
{
var index = options.Filters.ToList().FindIndex(filter => filter is ServiceFilterAttribute attr && attr.ServiceType.Equals(typeof(AbpExceptionFilter)));
if (index > -1)
options.Filters.RemoveAt(index);
options.Filters.Add(typeof(LeanGlobalExceptionFilter));
});

2.4、这样我们就添加好自己的全局异常的filter了,下面让我们来试一下是否替换成功了。添加好异常代码 int ssss = int.Parse("aaaaa");

跑起项目,在swagger中测试请求,如下图所示,这样就说明全局异常已经完成替换了。

三、下一章介绍

swagger的完整接入方法

最新文章

  1. IntelliJ IDEA热加载自动更新(Update classes and resources )
  2. Codeforces Round #205 (Div. 2)
  3. 使用jquery实现局部刷新DIV
  4. 集合及特殊集合arrayList
  5. dede仿站笔记
  6. Delphi中编写无输出函数名的DLL文件(有点意思)(400多篇博客)
  7. Grafana+Prometheus系统监控之webhook
  8. SLAM+语音机器人DIY系列:(八)高阶拓展——2.centos7下部署Django(nginx+uwsgi+django+python3)
  9. me
  10. 小程序问题集:保存失败:Error: ENOENT: no such file or directory, open
  11. Linux之磁盘挂载
  12. tensorFlow(二)线性回归
  13. mac下配置Apache虚拟域名方案,以及遇到的坑
  14. tensorflow variable的保存和修改(加载一部分variable到新的model中)
  15. python 插值查找
  16. eclipse 背景颜色
  17. webstrom内置压缩工具YUI-compressor详解
  18. jssip音视频及短信开发demo(中文注释完整版)
  19. 180601-MySql性能监控工具MyTop
  20. DOM方法index()相关问题(为何$(this).index(this)是错误的 )

热门文章

  1. Git应用详解第六讲:Git协作与Git pull常见问题
  2. C与C++的函数声明中省略参数的不同意义
  3. 事务的传播属性及隔离级别 Spring
  4. xshell使用记录
  5. Redis学习三:Redis高可用之哨兵模式
  6. Linux 下迁移 Nexus3
  7. E - Roaming Atcoder
  8. 1. esc 安装 jenkins
  9. C++养成好的代码习惯
  10. PHP反序列化漏洞总结(二)