我想做类似的事情。一种方法是在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));