2017-06-09 4 views
8

Wie finden Sie alle Controller und Aktionen mit seinem Attribut in Dotnet-Core? Ich In .NET Framework verwendet diesen Code:So finden Sie alle Controller und Aktionen

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(); 
} 

aber es ist nicht in Dotnet Kern arbeiten.

+0

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

Antwort

6

Wie wäre es, IActionDescriptorCollectionProvider in Ihre Komponente zu injizieren, die diese Dinge wissen muss? Es ist im Microsoft.AspNetCore.Mvc.Infrastructure Namensraum.

Diese Komponente bietet Ihnen jede einzelne in der App verfügbare Aktion. Hier ist ein Beispiel für die Daten, die es bietet:

Action descriptor collection provider data sample

Als Bonus, können Sie auch alle Filter auswerten kann, Parameter usw.


Als Randbemerkung, ich nehme an, Sie könnte Reflektion verwenden, um die Typen zu finden, die von ControllerBase erben. Aber wussten Sie, dass Sie Controller haben können, die nicht davon erben? Und dass Sie Konventionen schreiben können, die diese Regeln außer Kraft setzen? Aus diesem Grund macht es das Einspritzen der obigen Komponente viel einfacher. Du musst dir keine Sorgen machen, dass es kaputt geht.

+0

danke für Ihre Hilfe. diese https://stackoverflow.com/questions/39276763/getting-controller-details-in-asp-net-core und https://stackoverflow.com/questions/31874733/how-to-read-action-methods-attributes -in-asp-net-core-mvc hilf mir, es zu lösen :) – Raika

Verwandte Themen