有没有办法让我的MVC 3项目的所有操作方法列表?MVC获取所有操作方法
3
A
回答
7
您可以在运行时使用,以反映对组件的生产方法列表中返回的ActionResult控制器:
public IEnumerable<MethodInfo> GetMvcActionMethods()
{
return
Directory.GetFiles(Assembly.GetExecutingAssembly().Location)
.Select(Assembly.LoadFile)
.SelectMany(
assembly =>
assembly.GetTypes()
.Where(t => typeof (Controller).IsAssignableFrom(t))
.SelectMany(type => (from action in type.GetMethods(BindingFlags.Public | BindingFlags.Instance)
where action.ReturnType == typeof(ActionResult)
select action)
)
);
}
这会给你的行动,而不是浏览列表(即它如果您可以在每个操作中使用不同的视图,则不起作用)
+1
此方法将不包括返回“FileContentResult”,“JsonResult”,... 的行动方法请参阅我的回应低于 – Moeri 2013-06-11 13:04:56
8
这将为您提供一个字典,其中控件类型为键,其MethodInfos的IEnumerable为值。
var assemblies = AppDomain.CurrentDomain.GetAssemblies(); // currently loaded assemblies
var controllerTypes = assemblies
.SelectMany(a => a.GetTypes())
.Where(t => t != null
&& t.IsPublic // public controllers only
&& t.Name.EndsWith("Controller", StringComparison.OrdinalIgnoreCase) // enfore naming convention
&& !t.IsAbstract // no abstract controllers
&& typeof(IController).IsAssignableFrom(t)); // should implement IController (happens automatically when you extend Controller)
var controllerMethods = controllerTypes.ToDictionary(
controllerType => controllerType,
controllerType => controllerType.GetMethods(BindingFlags.Public | BindingFlags.Instance).Where(m => typeof(ActionResult).IsAssignableFrom(m.ReturnType)));
它看起来不仅仅是当前程序集,它还会返回方法,例如返回JsonResult而不是ActionResult。 (JsonResult实际上是从继承的ActionResult)
编辑:对于Web API支持
变化
&& typeof(IController).IsAssignableFrom(t)); // should implement IController (happens automatically when you extend Controller)
到
&& typeof(IHttpController).IsAssignableFrom(t)); // should implement IHttpController (happens automatically when you extend ApiController)
,并删除此:
.Where(m => typeof(ActionResult).IsAssignableFrom(m.ReturnType))
要导致Web API方法可以返回任何东西。 (POCO的,HttpResponseMessage,...)
相关问题
- 1. Asp.NET MVC ModelBinder,获取操作方法
- 2. MVC Post操作方法没有触发
- 3. ASP.NET MVC的操作方法
- 4. MVC操作方法和Javascript
- 5. MVC输入操作方法
- 6. 从AzMan获取所有操作
- 7. Asp.net MVC获取操作方法的完全限定URL
- 8. HTML操作ID获取方法
- 9. 如何使用节点js中的方法获取所有js文件操作
- 10. 获取当操作符重载,甚至定义的所有方法
- 11. Spring MVC获取方法URL
- 12. ASP.NET MVC操作未获取参数值
- 13. 获取所有培训的方法
- 14. 获取文件中的所有方法
- 15. 如何通过传递ControllerName来获取MVC Controller的所有操作列表?
- 16. MVC操作方法 - 多视图
- 17. 如何从ASP.NET MVC操作方法
- 18. CodeIgniter MVC数据操作最佳方法
- 19. 多态性的操作方法MVC
- 20. 消费ASP.NET MVC操作方法
- 21. ASP.NET MVC中的RestFul操作方法3
- 22. 在ASP MVC的WebAPI操作方法
- 23. 如何从操作的MethodInfo获取MVC操作信息?
- 24. 获取解决方案中所有方法参数的方法
- 25. 获取所有区域,控制器和操作作为树
- 26. MVC Post方法没有从get方法获取任何信息?
- 27. 在ASP.Net视图中获取控制器和操作方法的名称MVC
- 28. 如何使用文件操作方法在ASP.NET MVC中获取文件的ContentType
- 29. 获取单个并获取ApiController上的所有方法
- 30. 传递操作符作为参数来获取方法
在运行时还是在VS? – Richard 2011-04-27 09:08:22
你是指动作还是视图?如果您的意思是视图,您是否包含部分视图?还有哪个viewengine?如果您使用默认值,那么您可以使用反射来获取从System.Web.Mvc.ViewPage或ViewPage继承的程序集/命名空间中的每个类的列表。您可以执行相同类型的操作 - 使用反射来标识从Controller继承的所有类以及返回ActionResult派生的所有公共方法。 –
RichardW1001
2011-04-27 09:20:06
我想在VS的行动 – 2011-04-27 09:44:28