Ich versuche, einen Komponententest zu schreiben, der alle Aktionsmethoden meiner Controller-Klassen durchläuft und nach Aktionsmethoden sucht, die keine sicherheitsrelevanten Attribute enthalten (z. B. [Autorisieren]).
Wie bestimmt die ASP.NET-Routing-Engine, welche Methoden Aktionsmethoden sind? Offensichtlich müssen die Aktionsmethoden öffentlich sein, aber Methoden wie ToString () sind keine Aktionsmethoden, daher gibt es eine gewisse Logik.
Ich hörte auf, faul zu sein, und ich fand die Antwort, die meisten davon in System.Web.Mvc.ActionMethodSelector.PopulateLookupTables () (danke Reflektor!)
%Vor%Ich war überrascht, alle öffentlichen Methoden auf meinen Basis-Controller-Klassen zu sehen, die ohne Sicherheit für sie verfügbar waren!
Alle Methoden in einem Controller werden als Aktionen betrachtet, mit Ausnahme von nichtöffentlichen Methoden.
Zuerst werden die Methoden mit dem Namen verglichen: MethodName = ActionName.
Wenn Sie das Standardverhalten überschreiben möchten, verwenden Sie das Attribut [ActionName].
%Vor%Dann wird diese Methode ausgelöst, wenn eine Ссылка URL angefordert wird.
Lesen Sie mehr in Phils Blog: Wie eine Methode zu einem wird Aktion
BEARBEITEN: Okay, vielleicht dieser: Alle öffentlichen Methoden, die direkt in Ihrer Controller-Klasse definiert sind, nicht von Basisklassen geerbt, nicht überschrieben von denen in Basisklassen, es sei denn, Sie haben rekursiv diese Basismethoden als Aktionen identifiziert und nicht mit NoAction dekoriert Attribut.
Es gibt eine wirklich gute Erklärung dafür, wie die Aktionsmethoden in dem ASP.NET MVC-Buch verarbeitet werden, das ich als Referenz verwende. Zufällig sind die relevanten Seiten in Google-Büchern verfügbar:
Wenn die Verbindung abbricht, ist es Seite 310 von Pro ASP.NET MVC Framework von Steven Sanderson.
Nicht sicher, dass es Ihnen helfen wird, herauszufinden, wie Sie Ihre Komponententests schreiben, aber es könnte Ihnen helfen, dem Reflektorcode zu folgen ...
Tags und Links asp.net-mvc