zoukankan      html  css  js  c++  java
  • 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

     

  • 相关阅读:
    HDU 1069 Monkey and Banana
    HDU 1029 Ignatius and the Princess IV
    HDU 1024 Max Sum Plus Plus
    Gym100923H Por Costel and the Match
    Codeforces 682C Alyona and the Tree
    Codeforces 449B Jzzhu and Cities
    Codeforces (ccpc-wannafly camp day2) L. Por Costel and the Semipalindromes
    Codeforces 598D (ccpc-wannafly camp day1) Igor In the Museum
    Codeforces 1167c(ccpc wannafly camp day1) News Distribution 并查集模板
    快乐数问题
  • 原文地址:https://www.cnblogs.com/visonme/p/5522904.html
Copyright © 2011-2022 走看看