Filterattribut Im Gegensatz zu normalen Attribute, befindet sich auf Controller Actions
und ist Teil des ASP.NET Controller Ausführungsprozesses und werden gesammelt und durch den Motor ausgeführt Routing.
Die Lösung ist nicht out-of-the-box und erfordert eine nicht unerhebliche Komplexität. Im Falle einer Nicht-Aktionsmethode haben Sie die Möglichkeit, eine eigene kontrollierte Umgebung zu erstellen, die begrenzt und ein wenig erzwungen wird.
Ich würde dagegen und verwenden normale Methode Voraussetzungen oder Aufruf einer anderen Validierungsmethode innerhalb Ihrer Zielmethode auf "Sicherheit" oder andere Validierungen, aber sicherlich nicht Attribute zu testen.
Wenn Sie weiterhin Attribute verwenden möchten, kann das Folgende eine Lösung sein.
Sie müssen irgendeine Art von CustomSecurityManager
machen, die die gezielte Methode Sie wollen ausführen, er die Aufgaben haben:
- Suche nach der Zielmethode sie
- Sammeln bestimmte benutzerdefinierte Attribute und ausgeführt wird, Ausnahmebedingung oder Rückgabe false, wenn Probleme auftreten.
- Führen Sie die Methode aus, wenn die Attribute gültig sind.
Hinweis: Nur der CustomSecurityManager die GetNameItems
ruft.
Komponententests können durchgeführt werden, indem ein ICustomSecurityManager injiziert wird, der verspottet wird, um erwartete Ergebnisse zurückzugeben.
Sie Frage ist nicht klar. Attribute, die einmal mit '[AttributeUsage (AttributeTargets.Method)]' versehen wurden, können in jede Methode eingefügt werden. Attribute sind nur Metadaten über die Methode, an die sie angehängt ist. – Nkosi
Sagen Sie, dass 'EnsureUserIsAdmin' eine benutzerdefinierte Attributklasse ist, die Sie in Ihre Geschäftslogik geschrieben haben? Oder woher kam das? –
Lesen Sie diesen Link zum Erstellen eines benutzerdefinierten Attributs - https://msdn.microsoft.com/en-us/library/mt653985.aspx – Sanket