Wie stecken die Parameter der Methode in benutzerdefinierten Attributs

Habe ich ein benutzerdefiniertes Attribut mit dem Namen AuthoriseAttribute, dessen Konstruktor sieht wie folgt aus:

public AuthoriseAttribute(int userId)
{
  .. blah
}

Diese verwendet wird, mit einer Methode namens GetUserDetails() wie diese:

[Authorise(????????)]
public UserDetailsDto GetUserDetails(int userId)
{
  .. blah
}

Zur Laufzeit, die Anwesenheit von der Genehmigen-Attribut bewirkt, dass einige authorisation code auszuführen, benötigt die Benutzer-ID des Benutzers. Offensichtlich kann dieser entnommen werden die parameter der GetUserDetails() Methode, aber dies bedeutet, dass der Autorisierungscode, hängt von der Methode der parameter mit einem bestimmten Namen.

Möchte ich weitergeben kann, in der der tatsächliche Wert des userId parameter in das Attribut, so dass die Genehmigung-code arbeitet mit den übergebenen Wert in dem Attribut (also nicht die Methode, parameter), deren name bekannt ist.

Etwas wie dieses (was nicht funktioniert):

[Authorise(userId)]
public UserDetailsDto GetUserDetails(int userId)
{
  .. blah
}

Ist so etwas möglich?

Nein, nicht möglich. Attribute sind meta-Daten. Parameter-Werte muss ein konstanter Wert sein.
Es ist etwas, das ich nicht verstehen - warum würden Sie wollen, um zu autorisieren, einen parameter einer Methode? IMO - Sie müssen zulassen, dass der Aufrufer der Methode - ist dies richtig?
Was Sie beschreiben, kann nicht direkt geschehen, da bin ich mir sicher, dass der compiler-Fehler, erzählt Sie. Es wäre hilfreich zu wissen, wie "die Anwesenheit von den Genehmigen-Attribut bewirkt, dass einige authorisation code ausführen" funktioniert. Sie sollten in der Lage sein, den code dort anschauen der parameter "userId".
Anstatt die Benutzer-info in jede Methode, könnten Sie die Attribut bekommen es durch andere Mittel, wie die WCF-Kontext, oder aus Active Directory... Dann Ihre Methoden sind sauber und nicht mehrere Aufgaben.
Danke Jungs. @Tim: ich bin mit Schloss Windsor abfangen. Das Vorhandensein des Attributs bewirkt, dass die Methode invocation abgefangen werden und mir erlaubt, code auszuführen, bevor der Aufruf. Ich habe Zugriff auf die Methode info und der Attribut-info. Ich brauche, um die Benutzer-ID des Benutzers (und andere Sachen, aber ich halte die Frage einfach), aber es gibt keinen einfachen Weg, zu sagen, die Abfangjäger, wo die Benutzer-ID. Es könnte sein, übergeben der Methode einen int-parameter namens userId sein, oder es könnte sein, begraben tief in eine komplexe Typ-parameter.

InformationsquelleAutor David | 2012-05-03

Schreibe einen Kommentar