欢迎大家阅读《朝夕Net社区技术专刊》
我们致力于.NetCore的推广和落地,为更好的帮助大家学习,方便分享干货,特创此刊!很高兴你能成为忠实读者,文末福利不要错过哦!
01
PART
为什么要使用ExceptionFilter
我们在程序开发设计中,难免程序中会发生异常,针对于这些异常如果我们不处理,那么可能就会直接给用户展示黄页,这肯定也不是一个系统应该给用户看到的;那么怎么处理呢?最普遍的方式就是直接Try-Catche;如图1。
在每个方法中Try-Catch捕捉异常,然后处理异常;如果这样写代码的话,必然会重复很多代码;这个方法里处理业务逻辑处理以外还要提供一行处理的代码;这样从程序设计而言,不是很好;那下面给大家演示一种Filter 专门来解决这个问题。
02
PART
如何使用ExceptionFilter捕捉异常:
1.定义一个CustomExceptionFilterAttribute特性,继承自Attribute,实现IExceptionFilter接口;实现接口中的OnException方法;如图1
2.标记在会出现异常的方法上!也可以标记在控制器上;也可以全局注册;异常处理推荐全局注册。
3.测试异常捕捉:项目启动WebApi ,图2 图3 图4 ;swagger调用Api,异常以后,确实能够进入到我们自定义的CustomExceptionFilterAttribute 特性中的OnException方法中去。
那这样,我们自定义了CustomExceptionFilterAttribute特性以后,主要是每个方法标记一下,或者控制器上标记一下,或者全局标记一下就可以生效于发生异常的方法。
4.完善OnException方法;这里有几个需要注意的要点,请看图5
03
PART
ActionFilter,为什么需要ActionFilter?
在系统开发设计中,Api提供方很多场景下需要记录日志;当Api被调用的时候,需要日志记录一下调用这个Api时的参数,Api执行结束后,也需要日志记录一下执行结果;针对这类场景比较土的办法大概就是如图1所示了。
如果都按照图1的方式来做,会出现大量的重复代码!
那么在CoreWebApi中支持一种ActionFilter;就可以完美的解决这个问题!
04
PART
如何使用ActionFilter?
1.定义一个特性CustomActionFilterAttribute;可以继承ActionFilterAttribute特性;ActionFilterAttribute特性中有很多虚方法可以供覆写,包括的有同步异步的方式;也可以实现IActionFilter, IAsyncActionFilter接口,分别取自己实现各自的方法;我这里是继承了ActionFilterAttribute,同时也实现了两个接口;如图2
2.标记在指定的方法上;图2所示:也可以标记在控制器上;也可以全局注册;
3.测试;swagger请求标记的有 CustomActionFilterAttribute 的 GetUserInfo方法;
如图3、图4 图5 图6
那么在方法上标记我们自定义的这个特性以后,在调用Api 的时候,Api执行之前会先进入到这个特性的 OnActionExecuting 方法;然后再进入到Api中执行Api的逻辑;然后再执行这个特性的OnActionExecuted方法。
那么既然这样;我们就可以充分的利用这个特点;如果需要在方法前增加一些日志记录,那就可以在自定义的特性中,在 OnActionExecuting方法中写入日志信息;在OnActionExecuted方法中也写入日志信息。
如何创建一个自定义的`ErrorHandlerMiddleware`方法
【技术专刊】Core3.1WebApi_Filter-Authorize详解
往期 精彩 回顾
【推荐】.NET Core开发实战视频课程 ★★★
.NET Core实战项目之CMS 第一章 入门篇-开篇及总体规划
【.NET Core微服务实战-统一身份认证】开篇及目录索引
Redis基本使用及百亿数据量中的使用技巧分享(附视频地址及观看指南)
.NET Core中的一个接口多种实现的依赖注入与动态选择看这篇就够了
10个小技巧助您写出高性能的ASP.NET Core代码
用abp vNext快速开发Quartz.NET定时任务管理界面
现身说法:实际业务出发分析百亿数据量下的多表查询优化
关于C#异步编程你应该了解的几点建议
C#异步编程看这篇就够了
给我好看
您看此文用
·
秒,转发只需1秒呦~
好看你就
点点
我