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:

  • 相关阅读:
    Vuejs之Component slot 插槽详解
    ASP.NET MVC生命周期与管道模型
    Unity IoC Base On MVC
    轻量级IoC框架Ninject.NET搭建
    原创【前端控件】之日历控件
    出现了内部错误-网站中X509Certificate2加载证书时出错
    windows service 1053错误 启动失败
    关于浏览器Number.toFixed的错误修复
    vue中用mock制造模拟接口(本文主要解决坑),一定要看完哦
    ubuntu开发项目不能执行热更新
  • 原文地址:https://www.cnblogs.com/dragon-L/p/5277470.html
Copyright © 2011-2022 走看看