2017-06-09 25 views
8

Jak znaleźć wszystkie kontrolery i akcje z jego atrybutem w rdzeniu dotnet? W .NET Framework Użyłem tego kodu:Jak znaleźć wszystkie kontrolery i akcje

public static List<string> GetControllerNames() 
{ 
    List<string> controllerNames = new List<string>(); 
    GetSubClasses<Controller>().ForEach(type => controllerNames.Add(type.Name.Replace("Controller", ""))); 
    return controllerNames; 
} 
public static 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(); 
} 

ale jej nie działa w rdzeniu dotnet.

+0

https://stackoverflow.com/questions/38308713/how-to-find-namespace-of-class-by-its-name-using-reflection-in-net-core –

Odpowiedz

6

Co powiesz na wstrzyknięcie IActionDescriptorCollectionProvider do swojego komponentu, który musi znać te rzeczy? Jest w przestrzeni nazw Microsoft.AspNetCore.Mvc.Infrastructure.

Ten komponent daje dostęp do każdej akcji dostępnej w aplikacji. Oto przykład danych Stanowi on:

Action descriptor collection provider data sample

Jako bonus, można również oceniać wszystkie filtry, parametry itp


Na marginesie, pewnie cię może użyć refleksji, aby znaleźć typy dziedziczące po ControllerBase. Ale czy wiesz, że możesz mieć kontrolerów, którzy nie dziedziczą z niego? I że można pisać konwencje, które zastępują te zasady? Z tego powodu wstrzyknięcie powyższego komponentu znacznie ułatwia. Nie musisz się martwić, że to pęknie.

+0

dzięki za pomoc. ten https://stackoverflow.com/questions/39276763/getting-controller-details-in-asp-net-core i https://stackoverflow.com/questions/31874733/how-to-read-action-methods-attributes -in-asp-net-core-mvc pomóż mi rozwiązać :) – Raika

Powiązane problemy