小白开学asp.net core《五》

                              —— 使用.net core mvc filter

 

一、简介

  今天在项目(https://github.com/ajuprince/aju.carefree)做登陆权限时,用到了filter,现将filer的使用做以下记录。

二、filter 简介

  filter俗称过滤器,它的作用是在action方法执行前后做一些处理。它在mvc action 管道中运行,所以也可以叫做过滤器管道。

                         

三、filter的执行顺序

  authorization filter ->  resource filter -> action filter -> exception filter -> result filter

  在.net core mvc 中新增了异步过滤器,如果提供了异步和同步过滤器,那么将执行异步过滤器,同步过滤器将不会执行。 

              

    (图片来自 john wu 的博客

  • authorization filter

   authorization filter  是这几种filter中优先级最高的,通常用于验证请求的合法性,俗称 授权过滤器。

  • resource filter

   resource filter 是第二个被执行的,model binding之前执行,通常用于对model加工处理,俗称 资源过滤器

  • action filter 

   action filter 这个过滤器是最常用到的过滤器,在调用action方法前后执行,在model binding之后执行,在使用上没什么特别注意的,俗称 方法过滤器

  • exception filter

   exception filter 常常用于应用程序执行异常是记录日志

  • result filter

  result filter 当action 执行完成后,最终会执行的filter,常常用于处理 action 执行结果

 四、filter类型在filter管道中的交互方式

    

五、filter 的注册

  filter 的注册有两种方式,一种是全局注册,另一种的区域注册

  • 全局注册是在startup.cs 中进行注册。注册后用于所有的request
  • 区域注册是在controller或者action 上面加上[typefilter(type)]

六、项目案例(区域)

  • 定义actionfilter:

public class handleloginasyncattribute : iasyncactionfilter
    {
        public async task onactionexecutionasync(actionexecutingcontext context, actionexecutiondelegate next)
        {
            context.httpcontext.session.trygetvalue("aju_prince_operatorprovider_20190708", out var result);
            if (result == null)
            {
                context.result = new redirectresult("/login/index");
                return;
            }
            await next.invoke();
        }
    }
  • 使用:

        

七、项目案例(全局)

  • filter定义

  

  • 注册