• Asp.net MVC3 中,动态添加filter


    Asp.net MVC3 中,动态添加filter

    filter是attribute,不支持泛型,传入的参数必须是固定的值。总之很受attribute本身的限制。

    发现一篇老外的文章,动态设置filter

    http://msdn.microsoft.com/en-us/magazine/gg309182.aspx

    写一个自己的controller基类

    override CreateActionInvoker方法

    在此方法中返回一个自己的ActionInvoker。

    可以继承MVC自带的ControllerActionInvoker

    重写ActionInvoker中的GetFilters方法。除了base的以外,添加一些自己的进去

      1: public class MyActionInvoker : ControllerActionInvoker
    
      2: {
    
      3:     protected override FilterInfo GetFilters(ControllerContext controllerContext, ActionDescriptor actionDescriptor)
    
      4:     {
    
      5:         var filters= base.GetFilters(controllerContext, actionDescriptor);
    
      6:         SetFilters(filters,actionDescriptor);
    
      7:         return filters;
    
      8:     }
    
      9: 
    
     10:     public Action<FilterInfo, ActionDescriptor> SetFilters { get; set; }
    
     11: }

    在自定义的controller基类中

      1: protected override IActionInvoker CreateActionInvoker()
    
      2: {
    
      3:     return new MyActionInvoker { SetFilters=SetFilters};
    
      4: }

    在此基类中提供一个void方法,供子类重写

      1: protected virtual void SetFilters(FilterInfo filter,ActionDescriptor actionDescriptor)
    
      2: {}

    在子类中重写SetFilters方法,添加或删除FilterInfo中的东西

    可以通过ActionDescriptor来判断是那个action,如果需要再添加

      1: if (actionDescriptor.ActionName.ToLower() == "a")
    
      2: {
    
      3:     filter.ActionFilters.Add(new testActionFilter<int>());
    
      4: }

    testActionFilter是一个泛型的,实现了IActionFilter的类。

    这样可以动态的添加filter到某个action上。并且filter不受attribute得限制

    http://msdn.microsoft.com/en-us/magazine/gg309182.aspx

  • 相关阅读:
    CSS属性值一览
    CSS属性一览
    CSS选择器一览
    HTML颜色编码
    游戏
    数据库系统概念
    关于总结
    章节测试
    我的博客皮肤
    Emeditor所有快捷键操作
  • 原文地址:https://www.cnblogs.com/Leo_wl/p/3292169.html
Copyright © 2020-2023  润新知