• AspNet MVC : 操作/控制器过滤器(action filter)


    1.Action Filter

       Action Filter提供了在执行action/controller前后对请求/响应修改的能力,可以应用于action和控制器上,作用在控制器上将自动被应用到该控制器下所有的action. 

      常见的应用场景例如: 用户验证授权, 修改view的返回结果,修改response头,日志记录,异常/错误处理等 。

      AspNet MVC包含四种类型的action filter:

      a.Auth Filter 验证过滤器,实现IAuthorizationFilter,用于针对action或者controller访问时候的用户身份验证或者授权验证。例如mvc自带的[Authorze]

      b.Action Filter 操作过滤器,实现IActionFilter接口,包含一些逻辑,用于Action执行前后前后被调用,可以用于处理修改类似request的参数或者response参数.

      c.Result filter 结果过滤器,实现IResultFilter接口,包含一些逻辑,用于直线ViewResult执行前后被调用,常见的应用就是修改返回的view.

      d.Exception filter 异常过滤,实现IExceptionFilter,用于action/controller中异常/错误的处理.

      默认以上四种类型的filter执行顺序是:

      『 Auth ---- Action ---- Result ---- Exception  』 

     身份验证永远最先被执行,异常处理最后被执行,如果想打破这种默认的执行的顺序,可以通过修改FilterAttribute的Order来实现,FilterAtribute的Order实现与接口IMvcFilter

     

    public interface IMvcFilter{
        //
        int Order{get;}
    }
    public class FilterAttribute: Atrribute, IMvcFilter
    {
        //
        public int Order{get; set;}
    }

    ps:想验证filter指定默认的执行顺序,可以分别实现对应的接口和FilterAttribute接口然后输出order属性看看,例如:

    //继承FilterAttribute主要是为了能像属性一样应用fliter
    public class AFilterAttribute: FilterAttribute, IActionFilter
    {
        public  void OnActionExecuted(){}
        public  void OnActionExecuting(){ ==>output :order }
    } 
    
    public class MyController: Controller{
       [AFilter]
       public string Index(){/}
    }
    
    如果想实现全局应用所有请求或者不想这种声明是添加可以通过GlobalFilterCollection添加过滤器.
    GlobalFilterCollection ::Add( your filter  );

    2.自定义action filter

     自定义过滤器主要实现对应的过滤器接口就可以了,Auth过滤器,实现IAuthorizationFilterjie接口的OnAuthorization方法就可以了(或者直接继承AuthorieAttribute).Exception过滤器实现IExceptionFilter::OnException方法,如果要实现action/result可以继承ActionFilterAttribute类.

     ActionFilterAttribue继承了FilterAttribute,实现了IActionFilter,IResultFilter接口.

     FilterAttribute <-- { class: Attribute , Interface:IMvcFilter }

          |

          |                                     

    ActionFilterAttribute  <---{ interface: IActionFilter, IResultFilter }

          |                                                 

          |                                    

     custom filter

    interface: IActionFilter {

    Method: OnActionExecuting , OnActionExecuted

    }

    interace:IResultFilter{

    Method: OnResultExecuting/OnResultExecuted

    }

    自定义过滤器可以实现 OnActionExecuting /OnActionExecuted 用于在action执行前后分别处理一些自定义逻辑,比如修改view data数据

    重写OnResultExecuting/OnResultExecuted 用于在view redner前后执行一些自定义逻辑,比如修改呈现的view

     

  • 相关阅读:
    bzoj4183: tree
    bzoj4389: ZYB and Trees
    bzoj3253: 改编
    uoj#274. 【清华集训2016】温暖会指引我们前行
    uoj#272. 【清华集训2016】石家庄的工人阶级队伍比较坚强
    uoj#11. 【UTR #1】ydc的大树
    uoj#29. 【IOI2014】Holiday
    uoj#187. 【UR #13】Ernd
    bzoj5019: [Snoi2017]遗失的答案
    bzoj5017: [Snoi2017]炸弹
  • 原文地址:https://www.cnblogs.com/visonme/p/5522904.html
Copyright © 2020-2023  润新知