1

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

试图

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

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

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

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

条件 全图

4

1 回答 1

0

我想做类似的事情。一种方法是在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));
于 2014-04-11T18:14:14.387 回答