2017-06-09 24 views
8

Tüm denetleyicileri ve eylemleri dotnet core özniteliğinde nasıl bulunur?Tüm Denetleyici ve Aksiyon Bulma

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

ama onun dotnet çekirdeğinde çalışmıyor: .NET Framework Bu kodu kullanılır.

+0

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

cevap

6

Bu şeyleri bilmeniz gereken bileşeninize IActionDescriptorCollectionProvider enjeksiyonu nasıl yapılır? Microsoft.AspNetCore.Mvc.Infrastructure ad alanında.

Bu bileşen, uygulamadaki her türlü eylemi size sağlar. İşte sağladığı verilerin bir örnek: Bir bonus olarak

Action descriptor collection provider data sample

, ayrıca filtrelerin hepsi değerlendirebilir, vb Bir yan not olarak


parametreleri, seni herhalde ControllerBase'dan devralan türleri bulmak için yansımayı kullanabilir. Ama ondan devralmayan kontrol cihazlarına sahip olabileceğini biliyor muydun? Ve bu kuralları geçersiz kılan sözleşmeler yazabilirsin? Bu nedenle, yukarıdaki bileşenin enjekte edilmesi onu daha kolay hale getirir. Bunu kırmak için endişelenmene gerek yok. Yardımlarınız için

+0

teşekkürler. bu https://stackoverflow.com/questions/39276763/getting-controller-details-in-asp-net-core ve https://stackoverflow.com/questions/31874733/how-to-read-action-methods-attributes -in-asp-net-core-mvc çözmeme yardım et :) – Raika