转载

【技术专刊】Core3.1WebApi_ ExceptionFilter_ActionFilter

【技术专刊】Core3.1WebApi_ ExceptionFilter_ActionFilter

【技术专刊】Core3.1WebApi_ ExceptionFilter_ActionFilter

欢迎大家阅读《朝夕Net社区技术专刊》

我们致力于.NetCore的推广和落地,为更好的帮助大家学习,方便分享干货,特创此刊!很高兴你能成为忠实读者,文末福利不要错过哦!

01

PART

为什么要使用ExceptionFilter

我们在程序开发设计中,难免程序中会发生异常,针对于这些异常如果我们不处理,那么可能就会直接给用户展示黄页,这肯定也不是一个系统应该给用户看到的;那么怎么处理呢?最普遍的方式就是直接Try-Catche;如图1。

【技术专刊】Core3.1WebApi_ ExceptionFilter_ActionFilter

图1

在每个方法中Try-Catch捕捉异常,然后处理异常;如果这样写代码的话,必然会重复很多代码;这个方法里处理业务逻辑处理以外还要提供一行处理的代码;这样从程序设计而言,不是很好;那下面给大家演示一种Filter 专门来解决这个问题。

02

PART

如何使用ExceptionFilter捕捉异常:

【技术专刊】Core3.1WebApi_ ExceptionFilter_ActionFilter

1.定义一个CustomExceptionFilterAttribute特性,继承自Attribute,实现IExceptionFilter接口;实现接口中的OnException方法;如图1

【技术专刊】Core3.1WebApi_ ExceptionFilter_ActionFilter

图1

【技术专刊】Core3.1WebApi_ ExceptionFilter_ActionFilter

2.标记在会出现异常的方法上!也可以标记在控制器上;也可以全局注册;异常处理推荐全局注册。

【技术专刊】Core3.1WebApi_ ExceptionFilter_ActionFilter

【技术专刊】Core3.1WebApi_ ExceptionFilter_ActionFilter

3.测试异常捕捉:项目启动WebApi ,图2 图3 图4 ;swagger调用Api,异常以后,确实能够进入到我们自定义的CustomExceptionFilterAttribute 特性中的OnException方法中去。

【技术专刊】Core3.1WebApi_ ExceptionFilter_ActionFilter

图2

【技术专刊】Core3.1WebApi_ ExceptionFilter_ActionFilter

图3

【技术专刊】Core3.1WebApi_ ExceptionFilter_ActionFilter

图4

那这样,我们自定义了CustomExceptionFilterAttribute特性以后,主要是每个方法标记一下,或者控制器上标记一下,或者全局标记一下就可以生效于发生异常的方法。

那么异常后进入到 OnException方法后,怎么处理异常呢?请往下看。

【技术专刊】Core3.1WebApi_ ExceptionFilter_ActionFilter

4.完善OnException方法;这里有几个需要注意的要点,请看图5

【技术专刊】Core3.1WebApi_ ExceptionFilter_ActionFilter

图5

03

PART

ActionFilter,为什么需要ActionFilter?

在系统开发设计中,Api提供方很多场景下需要记录日志;当Api被调用的时候,需要日志记录一下调用这个Api时的参数,Api执行结束后,也需要日志记录一下执行结果;针对这类场景比较土的办法大概就是如图1所示了。

【技术专刊】Core3.1WebApi_ ExceptionFilter_ActionFilter

图1

如果都按照图1的方式来做,会出现大量的重复代码!

那么在CoreWebApi中支持一种ActionFilter;就可以完美的解决这个问题!

04

PART

如何使用ActionFilter?

1.定义一个特性CustomActionFilterAttribute;可以继承ActionFilterAttribute特性;ActionFilterAttribute特性中有很多虚方法可以供覆写,包括的有同步异步的方式;也可以实现IActionFilter, IAsyncActionFilter接口,分别取自己实现各自的方法;我这里是继承了ActionFilterAttribute,同时也实现了两个接口;如图2

【技术专刊】Core3.1WebApi_ ExceptionFilter_ActionFilter

图1

2.标记在指定的方法上;图2所示:也可以标记在控制器上;也可以全局注册;

【技术专刊】Core3.1WebApi_ ExceptionFilter_ActionFilter

图2

3.测试;swagger请求标记的有 CustomActionFilterAttribute GetUserInfo方法;

如图3、图4 图5  图6

【技术专刊】Core3.1WebApi_ ExceptionFilter_ActionFilter

图3

【技术专刊】Core3.1WebApi_ ExceptionFilter_ActionFilter

图4

【技术专刊】Core3.1WebApi_ ExceptionFilter_ActionFilter

图5

【技术专刊】Core3.1WebApi_ ExceptionFilter_ActionFilter

图6

【技术专刊】Core3.1WebApi_ ExceptionFilter_ActionFilter

那么在方法上标记我们自定义的这个特性以后,在调用Api 的时候,Api执行之前会先进入到这个特性的 OnActionExecuting 方法;然后再进入到Api中执行Api的逻辑;然后再执行这个特性的OnActionExecuted方法。

【技术专刊】Core3.1WebApi_ ExceptionFilter_ActionFilter

那么既然这样;我们就可以充分的利用这个特点;如果需要在方法前增加一些日志记录,那就可以在自定义的特性中,在 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#异步编程看这篇就够了

给我好看

【技术专刊】Core3.1WebApi_ ExceptionFilter_ActionFilter

您看此文用

·

秒,转发只需1秒呦~

【技术专刊】Core3.1WebApi_ ExceptionFilter_ActionFilter

好看你就

点点

原文  http://mp.weixin.qq.com/s?__biz=MzU4Mjc4NzgyOQ==&mid=2247484839&idx=1&sn=02d1706fc115ae251f5c223bb531d76a
正文到此结束
Loading...