有没有办法获取我的 MVC 3 项目的所有操作方法的列表?
最佳答案
这将为您提供一个字典,其中 Controller 类型作为键,其 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,...)
关于c# - MVC 获取所有 Action 方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5801630/