有没有办法通过ASP.NET MVC3管道获取Controller Type?

时间:2011-12-05 13:38:08

标签: c# asp.net-mvc-3 reflection

我需要掌握另一个Controller上的属性(即不是当前正在执行的属性)。

执行此操作的一种方法如下:

    Type controllerType = Type.GetType("App1.UI.Web.Controllers." + controllerName + "Controller", true);
    object[] controllerAttributes = controllerType.GetCustomAttributes(true);

使用MVC管道是否有更好,更不易碎的方法?我不想实例化控制器,我只想要它的属性。

1 个答案:

答案 0 :(得分:2)

在滚动太远之前,请记住控制器不必以后缀“Controller”结束。 MVC控制器的默认命名约定是在类上附加单词“Controller”。所以你的默认值是“HomeController”和“AboutController”。您可以轻松地创建一个名为“MyHome”或“Dashboard”的类,并让它继承自Controller,它将是一个没有“Controller”后缀的控制器。

我过去曾创建过路线约束。以下是我使用的代码片段:

 List<Type> _type = Assembly
                            .GetCallingAssembly()
                            .GetTypes()
                            .Where(type => type.IsSubclassOf(typeof(Controller)))
                            .ToList()

代码的作用是在当前程序集中查找作为控制器的所有类。您还可以在以下位置添加一些代码:

 .Where(type => type.IsSubclassOf(typeof(Controller)) && type.Name.ToLower() == "homecontroller")