zoukankan      html  css  js  c++  java
  • MVC4 Filter (筛选器)

     Filter,在MVC中我们通常将Filter定义成Attribute特性 来供Controller 或者Action 方法调用。 FilterAttribute 是所有Filter 的基类。

     而 FilterAttribute 实现了IMvcFilter 接口。

    GIobalFilterCollection :全局Filter。如下代码注册全局 Filter。

      public static void RegisterGlobalFilters(GlobalFilterCollection filters)
            {
                //filters.Add(new HandleErrorAttribute());
                GlobalFilters.Filters.Add(new BazAttribute()); 
            }

    自定义Filter特性

        public abstract class FilterBaseAttribute : FilterAttribute, IActionFilter
        {
            public void OnActionExecuted(ActionExecutedContext filterContext)
            { }
    
            public void OnActionExecuting(ActionExecutingContext filterContext)
            { }
        }
    
        public class FooAttribute : FilterBaseAttribute
        { }
        public class BarAttribute : FilterBaseAttribute
        { }
        public class BazAttribute : FilterBaseAttribute
        { } 

    AttributeUsageAttribute: 设置AllowMultiple=false,表示filter在同一个目标元素上只能使用一次 如下代码

     [AttributeUsage(AttributeTargets.Class | AttributeTargets.Method, AllowMultiple = false)]
        public class FooAttribute : FilterAttribute, IActionFilter
        {
            public void OnActionExecuted(ActionExecutedContext filterContext)
            { }
            public void OnActionExecuting(ActionExecutingContext filterContext)
            

    然后我们在三个地方设置 Foo的Filter

    全局:

     public static void RegisterGlobalFilters(GlobalFilterCollection filters)
            {
                //filters.Add(new HandleErrorAttribute());
                GlobalFilters.Filters.Add(new FooAttribute());
            }

    controller 和 action

        [Foo]
        public class HomeController : Controller
        {
            public ActionResult Index()
            {
                ReflectedControllerDescriptor controllerDescriptor = new ReflectedControllerDescriptor(typeof(HomeController));
                ActionDescriptor actionDescriptor = controllerDescriptor.FindAction(ControllerContext, "DemoAction");
                IEnumerable<Filter> filters = FilterProviders.Providers.GetFilters(ControllerContext, actionDescriptor);
                return View(filters);
            }
    
            [Foo]
            public void DemoAction()
            { }
        }

    运行会发现 只有一个filter被执行了。

    FiterInfo:

  • 相关阅读:
    JQuery:JQuery语法、选择器、事件处理
    循序渐进DB2(第2版)——DBA系统管理、运维与应用案例
    高级进阶DB2(第2版)——内部结构、高级管理与问题诊断
    DB2数据库性能调整和优化(第2版)
    金融工程中的蒙特卡罗方法
    代数学教程
    拓扑线性空间与算子谱理论
    李代数(第2版)
    编程的修炼(中英双语)
    iOS应用开发详解
  • 原文地址:https://www.cnblogs.com/dragon-L/p/5277470.html
Copyright © 2011-2022 走看看