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:

  • 相关阅读:
    zip加密-字符串加密成字符串
    语言学习第一天
    localStorage和sessionStorage数据存储
    ValueOf()和toString()
    call()与apply()区别typeof和instanceof的区别
    javaScript判断手机型号
    HTML&CSS
    Doctype 严格模式与混杂模式-如何触发这两种模式,区分它们有何意义?
    获得地址栏内的参数
    私有变量
  • 原文地址:https://www.cnblogs.com/dragon-L/p/5277470.html
Copyright © 2011-2022 走看看