MVC的ActionFilter

1. Filter是Aop的一种实现, 权限Filter, 异常Filter,ActionFilter

2.扩展ActionFilter

2.1)ActionFilterAttribute

这个类里面的四个方法都可以扩展,

2.2)ActionFilter的执行顺序

  2.2.1.Action执行之前执行OnActionExecuting方法
  2.2.2.Action执行之后View执行之前,先执行OnActionExecuted,然后执行OnResultExecuting
  2.2.3.结果执行完之后,执行OnResultExecuted

  ****ActionFilter可以在方法执行前后,视图替换前后,加入逻辑

2.3)ActionFilter扩展和使用步骤:

  2.3.1.扩展ActionFilter中的4个方法
  2.3.2.注册扩展方法

2.4)ActionFilter扩展应用

例子:

网站运行模式是一种请求---响应,传输数据流---就有压缩数据流的需求---速度快,节约带宽
压缩过程:
 浏览器请求时声明支持的压缩类型Accept-encoding---服务器响应时,就将数据压缩---
通过content-encoding告诉浏览器数据的压缩类型---浏览器就自行解压然后展示

2.4.1 ActionFilter扩展类

 2.4.2 注册扩展类

 3.Action的执行时间顺序过程(依次向下)

OnAuthorization: 权限认证
OnActionExcuting
Action
OnActionExcuted
OnResultExcuting
Render(生成试图):ExcuteResult
OnResultExcuted

***权限认证里面的异常,可以被异常捕获到

****ActionFilter里面的异常,也可以被异常捕获到

****MVC中所有的Filter都是在控制器实例化之后,执行Action方法之前,而filter的执行以及Action的执行都在try-catch中,所以可以被捕获到

4.那些场景下可以用ActionFilter4.1)统计Action的执行时间--->可以实现4.2)把这个页面上次响应的内容缓存下来,下次请求不进Action,直接返回

  实现过程:
    OnActionExcuting-->找缓存---key(url什么的)--value(就是viewResult)
    OnResultExceted --保存缓存---key(url什么的)--value(就是viewResult)
    比较麻烦,但是.net core里面的ResourceFilter可以轻松实现
4.3) Action调用多个BLL层,调用前后调入日志记录-->Aop无法实现
  Filter的粒度是在方法Action,无法到达方法里面
  在service层需要事务,log的时候,像这种情况,需要借助另外的AOP方式,一般是IOC容器的AOP扩展

Aop是一种程序设计思想,是OOP的一个补充升级
OOP是静态的,如果有变化,就得修改
而AOP可以不修改Action方法就增加功能

 

posted @ 2020-02-13 18:42  wbxs  阅读(174)  评论(0编辑  收藏  举报