给定动作名称,控制器名称和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);