ASP.NET Core MVC 2.x 全面教程_ASP.NET Core MVC 25. 过滤器_执行顺序
在MVC的请求管道 并不是  asp.net core的请求管道。所以说Filter是专用于MVC的
贯穿特性,横穿关注点。比如授权、日志
ASP.NET Core MVC 2.x 全面教程_ASP.NET Core MVC 25. 过滤器_asp.net core 2.2_02

这里的Authorize其实就是一个Filter,主要用来授权的

ASP.NET Core MVC 2.x 全面教程_ASP.NET Core MVC 25. 过滤器_mvc_03
比如这个Filter,我们要求必须使用Https才可以访问
ASP.NET Core MVC 2.x 全面教程_ASP.NET Core MVC 25. 过滤器_执行顺序_04

ASP.NET Core MVC 2.x 全面教程_ASP.NET Core MVC 25. 过滤器_干货_05

ASP.NET Core MVC 2.x 全面教程_ASP.NET Core MVC 25. 过滤器_mvc_06

授权在整个管道的最前面
action过滤器是在Action被调用之前和之后,这个时候ModelBing已经发生了。绑定完之后就可以操纵这些参数了。
Rsult:在Action的IActionResult之前和之后,通过它可以控制结果的执行,也可以短路结果的执行


ASP.NET Core MVC 2.x 全面教程_ASP.NET Core MVC 25. 过滤器_asp.net core 2.2_07
对应的五种类型有物种的子接口
ASP.NET Core MVC 2.x 全面教程_ASP.NET Core MVC 25. 过滤器_mvc_08

新建一个Filter的文件夹
ASP.NET Core MVC 2.x 全面教程_ASP.NET Core MVC 25. 过滤器_asp.net_09
LogAsyncResourceFilter 这个过滤器主要用来做日志
ASP.NET Core MVC 2.x 全面教程_ASP.NET Core MVC 25. 过滤器_执行顺序_10
F12 看一下IResourceFilter这个接口的源码,接口就是实现的IFilterMetadata这个接口。
ASP.NET Core MVC 2.x 全面教程_ASP.NET Core MVC 25. 过滤器_asp.net core 2.2_11
所以我们只需要实现IResourceFilter 就可以了。实现接口的两个方法
ASP.NET Core MVC 2.x 全面教程_ASP.NET Core MVC 25. 过滤器_asp.net core 2.2_12
OnResourceExecuting是在授权过滤器之后,参数上下文包含了httpContext还有路由的一些细节。以及当前这个Action的信息。
因为这个Filter可以作用于Action
 

OnResourceExecuted:MVC管道剩余部门执行完后,才会执行。参数Context和上面不一样,比如说还返回了ActionResult的信息

ASP.NET Core MVC 2.x 全面教程_ASP.NET Core MVC 25. 过滤器_干货_13

异步版本

ASP.NET Core MVC 2.x 全面教程_ASP.NET Core MVC 25. 过滤器_执行顺序_14

它有个参数是Delegate委托next里面包装着整个MVC剩余的管道

ASP.NET Core MVC 2.x 全面教程_ASP.NET Core MVC 25. 过滤器_mvc_15
执行next方法 就是执行下一步的操作。这样就和同步的版本对应上了
ASP.NET Core MVC 2.x 全面教程_ASP.NET Core MVC 25. 过滤器_mvc_16

ASP.NET Core MVC 2.x 全面教程_ASP.NET Core MVC 25. 过滤器_mvc_17
ASP.NET Core MVC 2.x 全面教程_ASP.NET Core MVC 25. 过滤器_干货_18
所有的管道过滤器调用完成之后调用最后这句
ASP.NET Core MVC 2.x 全面教程_ASP.NET Core MVC 25. 过滤器_mvc_19
尽量还是使用同步的版本

应用Filter


ASP.NET Core MVC 2.x 全面教程_ASP.NET Core MVC 25. 过滤器_干货_20

还需要继承Attribute
ASP.NET Core MVC 2.x 全面教程_ASP.NET Core MVC 25. 过滤器_干货_21
异步的也需要继承
ASP.NET Core MVC 2.x 全面教程_ASP.NET Core MVC 25. 过滤器_干货_22

ASP.NET Core MVC 2.x 全面教程_ASP.NET Core MVC 25. 过滤器_执行顺序_23
运行页面查看控制台:


ASP.NET Core MVC 2.x 全面教程_ASP.NET Core MVC 25. 过滤器_干货_24
应用Controller级别
ASP.NET Core MVC 2.x 全面教程_ASP.NET Core MVC 25. 过滤器_mvc_25

打开默认页面后,再访问以下Privacy这个页面
ASP.NET Core MVC 2.x 全面教程_ASP.NET Core MVC 25. 过滤器_mvc_26

先注释掉
ASP.NET Core MVC 2.x 全面教程_ASP.NET Core MVC 25. 过滤器_asp.net_27
使用全局
两种方式
ASP.NET Core MVC 2.x 全面教程_ASP.NET Core MVC 25. 过滤器_asp.net_28
第三种:
ASP.NET Core MVC 2.x 全面教程_ASP.NET Core MVC 25. 过滤器_执行顺序_29

视频作者习惯于最后一种
ASP.NET Core MVC 2.x 全面教程_ASP.NET Core MVC 25. 过滤器_执行顺序_30

ASP.NET Core MVC 2.x 全面教程_ASP.NET Core MVC 25. 过滤器_执行顺序_31

执行顺序


ASP.NET Core MVC 2.x 全面教程_ASP.NET Core MVC 25. 过滤器_asp.net_32