3、ASP.Net Core2.0之Filter

        Asp.Net Core的filter总共有5种,它们分别是Authorization Filter(授权过滤器)、Resource Filter(资源过滤器),Action Filter、Exception Filter(异常过滤器)和Result Filter(结果过滤器)。它们通常都在不通的阶段执行,执行顺序是:授权过滤器→资源过滤器→action过滤器→结果过滤器。接下来我们详细的看每一种过滤器。

一、Authorization Filter(授权过滤器)

       授权过滤器在过滤管道中是第一个被执行的过滤器,通常被用于验证请求的合法性,如果不合法的话后面的管道验证会直接跳过。授权过滤器中有一个Before方法,不像其他过滤器有前置阶段方法和后置阶段方法。不要在授权过滤器中抛出异常,因为没有任何代码来处理异常(异常过滤器不处理)。

代码实例:

1、Startup中添加配置:

2、controllers中:

3、Login登录前端:

结果:访问Center是会被自动重定向到Login,Login登录后再post的Login中会把用户名和token写入到客户端的cookie中,再访问Center就会从请求中取出token。

4、关于Claim、ClaimsIdentity和ClaimsPrincipal的关系比喻

      可以用一个合法持有身份证的人来做比喻,ClaimsPrincipal就是持有身份证卡片的人,ClaimsIdentity就是身份证卡片,Claim是身份证卡片上的每一条信息。

二、Resource Filter(资源过滤器)

       资源过滤器是第二个执行的过滤器,在授权过滤器之后,Model Banding之前,资源过滤器在实现缓存和截断过滤器中有很多的运用。

1、添加ResourceFilter类和实现对应接口

OnResourceExecuted和OnResourceExecuting是接口IResourceFilter中的方法,需要再当前的类中实现。先执行OnResourceExecuting,后执行OnResourceExecuted。

2、使用

3、运行结果:

过滤器的取消与短路:上面的实例中在OnResourceExecuting中返回了一个Result,这样就不会再执行A()这个方法了,它直接被短路掉了。

三、Action Filter和Exception Filter

因为这两个过滤器的实现方式基本都相同所有把他们放在一起介绍。

1、Action Filter

需要Action Filter和Autorize配合使用才能在actionfilter中的OnActionExecuting中获取到缓存的信息,就行上面的,当执行Center方法时OnActionExecuting方法里面的name能获取到值,而当执行A方法时name为null。

2、Exception Filter(异常过滤器)