【问题标题】:Conditional filter: Only for controllers that inherit from baseController and is a post)条件过滤器:仅适用于继承自 baseController 且为 post 的控制器)
【发布时间】:2013-09-04 13:38:10
【问题描述】:

如何为控制器继承baseController并且是帖子的所有操作应用全局过滤器?

尝试

已经在使用Ninject.Web.MVC aka Ninject.Web.Mvc.FilterBindingSyntax

但我不知道如何将条件BindFilter 仅应用于帖子。

kernel.BindFilter<ValidateJsonAntiForgeryTokenAttribute>(System.Web.Mvc.FilterScope.Action, 0).WhenControllerType<baseController>(); ...??

这个尝试没有成功,因为我无法向 BindFilter 添加两个条件

Full image

【问题讨论】:

    标签: asp.net-mvc-4 action-filter ninject.web.mvc global-filter


    【解决方案1】:

    我想做类似的事情。一种方法是在When() 中实现多个条件。 WhenControllerType() 方法只是一个帮助器,它调用 When() 并检查控制器类型,因此您可以在自己的方法中重新实现它并添加您需要的任何其他逻辑。

    Ninject 是如何实现 WhenControllerType() 的:

    public IFilterBindingInNamedWithOrOnSyntax<T> WhenControllerType(Type controllerType)
    {
        this.When((Func<ControllerContext, ActionDescriptor, bool>) ((controllerContext, actionDescriptor) => (actionDescriptor.ControllerDescriptor.ControllerType == controllerType)));
        return this;
    }
    

    由此,我们知道如何为我们的约束获取控制器类型。

    要获得您想要的绑定,我们可以这样做(未经测试):

    kernel
        .BindFilter<ValidateJsonAntiForgeryTokenAttribute>(System.Web.Mvc.FilterScope.Action, 0)
        .When((controllerContext, actionDescriptor) =>
            controllerContext.HttpContext.Request.RequestType.ToLower() == "post" &&
            typeof(baseController).IsAssignableFrom(actionDescriptor.ControllerDescriptor.ControllerType));
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-02-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多