2016-05-17 16 views
0

Ich habe eine Liste aller Regler und ihre jeweiligen Aktionen in meinem Projekt bekommen verwaltet. Ich versuche jetzt, ein benutzerdefiniertes Attribut zu erstellen, das für jede Aktion verwendet wird, in der ich Eigenschaften wie die Beschreibung der Aktion Eg festlegen kann. "Dies erstellt einen Benutzer". Das scheint gut zu funktionieren, aber jetzt lautet die Frage: Wie würde ich die benutzerdefinierten Attribute für jede Aktion abrufen?Wie bekommen alle benutzerdefinierten für jeden Controller-Aktion in Projektattribute

bekommt Folgenden eine Liste aller Controller und Aktionen. Ich muss nur jeweils Aktionen erhalten individuelle Access

  var controlleractionlist = asm.GetTypes() 
       .Where(type => typeof(System.Web.Mvc.Controller).IsAssignableFrom(type)) 
       .SelectMany(type => type.GetMethods(BindingFlags.Instance | BindingFlags.DeclaredOnly | BindingFlags.Public)) 
       .Where(m => !m.GetCustomAttributes(typeof(System.Runtime.CompilerServices.CompilerGeneratedAttribute), true).Any()) 
       .Select(x => new { Controller = x.DeclaringType.Name, Action = x.Name, CustomAttr = x.DeclaringType.GetCustomAttributes(typeof(AccessControl), false).Cast<AccessControl>()}) 
       .OrderBy(x => x.Controller).ThenBy(x => x.Action).ToList(); 

Beispiel einer typischen Controller-Aktion

[HttpGet] 
    [AccessControl(Description="Creates a user")] 
    public ActionResult Index() 
    { 
     return View(); 
    } 

Und schließlich meine benutzerdefinierte Attributklasse

public class AccessControl : AuthorizeAttribute 
{ 
    public string Description { get; set; } 
} 

Danke

Antwort

0

genannt Attribut Verwenden Sie diese:

Expression<Action<YourController>> myAction = m => m.Index(); 
var method = ((MethodCallExpression)myAction.Body).Method; 
var statusAttributes = method.GetCustomAttributes(); 

Sie können alle Kostüme Attribute aus der obigen statusAttributes Sammlung erhalten.

+0

Wenn Sie möchten mehr Attribute zugreifen, die von den Eltern vererbt werden, als Parameter in GetCustomAttributes wahr() übergeben. –

+0

Ich führe diese Funktionalität nicht innerhalb des Controllers selbst aus. Es kommt in einem anderen Controller vor, wo ich eine Liste aller Controller bekomme, die mit ihren Aktionen auf das System zugreifen. Jetzt möchte ich für jede Aktion auf die benutzerdefinierten Attribute zugreifen. – Rossco

+0

es sein, wenn ich durch jede Aktion laufen oder wenn ich die Liste der Controller und Aktionen erhalten – Rossco

Verwandte Themen