Wenn meine Anwendung initialisiert wird, möchte ich ein Register aller MVC-Aktionen erstellen, deren Methode ein bestimmtes CustomAttribute aufweist. Ich möchte, dass dieses Register die MVC-Bereich, Controller und Aktion verfolgt. Ich könnte verlangen, dass die Person, die das Attribut hinzufügt, diese Informationen angibt, aber es scheint, als ob ich diese Informationen basierend auf der MethodInfo herausfinden sollte: im Grunde das Gegenteil dessen, was passiert, wenn die ActionLink-Methode aufgerufen wird. Wie kann ich das tun?
Antwort
Zu viele Anzeigen?Durchsuchen Sie die Assembly nach jedem Controller
und suchen Sie dann alle Methoden, um diejenigen mit einem bestimmten Attribut zu finden.
// aktuelle Assembly -> alle Typen, die den Basistyp Controller haben -> Methoden abrufen
foreach (var typ in System.Reflection.Assembly.GetCallingAssembly().GetTypes().Where(t =>
typeof(Controller).IsAssignableFrom(t)))
{
foreach (var methodInfo in typ.GetMethods())
{
if (methodInfo.GetCustomAttributes(typeof(MyAttribute), false).Count() > 0)
{
var aktion = methodInfo.Name;
var controller = typ.Name;
}
}
}