asp.net-mvc - 如何通过传递 ControllerName 获取 MVC Controller 的所有操作列表?

标签 asp.net-mvc controller action

如何获取Controller的所有操作列表?我搜索但找不到示例/答案。我看到一些推荐使用反射的例子,但我不知道如何。

这是我想要做的:

public List<string> ActionNames(string controllerName){




}

最佳答案

你还没有告诉我们你为什么需要这个,但一种可能性是使用反射:

public List<string> ActionNames(string controllerName)
{
    var types =
        from a in AppDomain.CurrentDomain.GetAssemblies()
        from t in a.GetTypes()
        where typeof(IController).IsAssignableFrom(t) &&
                string.Equals(controllerName + "Controller", t.Name, StringComparison.OrdinalIgnoreCase)
        select t;

    var controllerType = types.FirstOrDefault();

    if (controllerType == null)
    {
        return Enumerable.Empty<string>().ToList();
    }
    return new ReflectedControllerDescriptor(controllerType)
        .GetCanonicalActions().Select(x => x.ActionName)
        .ToList();
}

很明显,我们知道反射不是很快,所以如果你打算经常调用这个方法,你可以考虑通过缓存 Controller 列表来改进它,以避免每次获取它甚至 memoizing给定输入参数的方法。

关于asp.net-mvc - 如何通过传递 ControllerName 获取 MVC Controller 的所有操作列表?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11300327/

相关文章:

c# - 我可以阻止客户端下载在浏览器上可见的 pdf 文件吗

asp.net-mvc - 如何在asp.net mvc中处理分页?

javascript - 如何将 jQuery 代码转换为可用的 AngularJS 代码

c# - 如何创建一个新线程来执行 Action<T>

javascript - 行动问题和表单提交

java - 我正在使用 Actions 类移动到某个元素,但无法单击下拉列表中的元素

asp.net - 用于测试的数据库和公共(public)数据库。两者如何使用?

asp.net-mvc - 为什么我的 ASP.NET Web API 路由可以与 Postman 一起使用,但不能与 Angular Post 请求一起使用

asp.net-mvc - MVC单元测试 Controller 的优势

java - 我怎样才能写一个 Controller 而不把它变成上帝对象?