给定动作名称,控制器名称和HTTP动词(GET,POST等),是否可以检查该动作是否具有特定的动作过滤器属性(即由其装饰)?

请注意:动作和控制器不是当前的动作和控制器,但可以是应用程序中的任何动作和控制器。

谢谢!

最佳答案

我已经回答了我自己的问题,这个问题非常相似。


问题:How do I get the MethodInfo of an action, given action, controller and area names?
答案:https://stackoverflow.com/a/13044838/195417


除了动作和控制器名称之外,您还需要http method(即GET,POST)以获得正确的结果。

这是解决您的问题的代码:

var controllerFactory = ControllerBuilder.Current
    .GetControllerFactory();

var controllerContext = @this.ControllerContext;

var otherController = (ControllerBase)controllerFactory
    .CreateController(
        new RequestContext(controllerContext.HttpContext, new RouteData()),
        controllerName);

var controllerDescriptor = new ReflectedControllerDescriptor(
    otherController.GetType());

var controllerContext2 = new ControllerContext(
    new MockHttpContextWrapper(
        controllerContext.HttpContext.ApplicationInstance.Context,
        method),
    new RouteData(),
    otherController);

var actionDescriptor = controllerDescriptor
    .FindAction(controllerContext2, actionName);

09-08 06:27