ASP.NET MVC программно получить список контроллеров - PullRequest
31 голосов
/ 20 июля 2009

В ASP.NET MVC есть способ перечислить контроллеры через код и получить их имя?

пример:

AccountController
HomeController
PersonController

даст мне список, такой как:

Account, Home, Person

Ответы [ 4 ]

42 голосов
/ 20 июля 2009

Используя Предложение Джона об отражении в сборке , вот фрагмент, который может оказаться полезным:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Reflection;
using System.Web.Mvc;

public class MvcHelper
{
    private static List<Type> GetSubClasses<T>()
    {
        return Assembly.GetCallingAssembly().GetTypes().Where(
            type => type.IsSubclassOf(typeof(T))).ToList();
    }

    public List<string> GetControllerNames()
    {
        List<string> controllerNames = new List<string>();
        GetSubClasses<Controller>().ForEach(
            type => controllerNames.Add(type.Name));
        return controllerNames;
    }
}
12 голосов
/ 20 июля 2009

Вы можете просмотреть свою сборку и найти все классы, которые наследуются от типа System.Web.MVC.Controller. Вот пример кода, который показывает, как вы могли бы сделать это:

http://mvcsitemap.codeplex.com/WorkItem/View.aspx?WorkItemId=1567

0 голосов
/ 11 февраля 2012

Всем, кто использует этот пост, лучше прочитать этот пост раньше: с использованием Assembly.GetCallingAssembly () не возвращает вызывающую сборку

Проблема в том, что виды бритвы действуют как независимые динамические сборки, и вы не получаете нужную сборку.

Яир

0 голосов
/ 20 июля 2009

Создайте свойство в каждом контроллере, а затем вы получите имя, подобное этому.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...