zoukankan      html  css  js  c++  java
  • 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方法就增加功能

  • 相关阅读:
    [调参]batch_size的选择
    [调参]CV炼丹技巧/经验
    [Pytorch]Pytorch加载预训练模型(转)
    [PyTorch]论文pytorch复现中遇到的BUG
    [Opencv]图像的梯度与边缘检测(转)
    freemodbus移植、实例及其测试方法
    eclipse的C/C++开发搭建
    ROS安装
    U-boot移植
    QT开发实战一:图片显示
  • 原文地址:https://www.cnblogs.com/fblogs/p/12304647.html
Copyright © 2011-2022 走看看