c# - MVC 获取所有 Action 方法

标签 c# asp.net-mvc-3 view controller

有没有办法获取我的 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/

相关文章:

javascript - 访问 razor block 中的本地 js 变量

jquery ui 自动完成组合框小部件示例针对 ajax 源进行了修改

android - 从右到左进度条?

c# - 即使控制台不可见,Console.WriteLine 是否会导致性能下降? (C#)

c# - 如何使用WPF/BitmapImage快速加载和显示图片?

C# Linq 或 Lambda 从类中获取 Dictionary<string, List<string>>

c# - Razor Foreach 循环不返回所有数据

css - 引用 CSS 中的背景图像 - IIS 中的应用程序 MVC 3 ASP.NET

android - 将字符串传递给 setContentView?

gwt - 如何设置 gwt 2.1 CellTables 标题的样式?