Ich habe ein benutzerdefiniertes Attribut AuthoriseAttribute dessen Konstruktor sieht wie folgt genannt:Wie Methodenparameter in benutzerdefinierte Attribute stopfen
public AuthoriseAttribute(int userId)
{
.. blah
}
Dieses mit einem Verfahren GetUserDetails()
wie folgt aufgerufen verwendet wird:
[Authorise(????????)]
public UserDetailsDto GetUserDetails(int userId)
{
.. blah
}
Bei Zur Laufzeit führt das Vorhandensein des Autorize-Attributs zur Ausführung eines Autorisierungscodes, der die ID des Benutzers erfordert. Offensichtlich kann dies aus dem Parameter der GetUserDetails()
-Methode extrahiert werden, aber das bedeutet, dass der Autorisierungscode davon abhängt, dass der Parameter der Methode einen bestimmten Namen erhält.
Ich möchte in der Lage sein, den tatsächlichen Wert des userId
Parameters in das Attribut zu übergeben, damit der Autorisierungscode mit dem an das Attribut übergebenen Wert arbeitet (dh nicht der Methodenparameter), dessen Name bekannt ist .
So etwas (was nicht funktioniert):
[Authorise(userId)]
public UserDetailsDto GetUserDetails(int userId)
{
.. blah
}
Ist so etwas möglich?
Nein nicht möglich. Attribute sind Metadaten. Parameterwerte müssen ein konstanter Wert sein. – vcsjones
Es gibt etwas, das ich nicht verstehe - warum möchten Sie einen Methodenparameter autorisieren?IMO - Sie müssen möglicherweise den Aufrufer der Methode autorisieren - ist das korrekt? – Sunny
Was Sie beschreiben, kann nicht direkt erledigt werden, da ich sicher bin, dass Ihnen der Compilerfehler mitgeteilt wurde. Es wäre hilfreich zu wissen, wie "das Vorhandensein des Authorize-Attributs dazu führt, dass ein Autorisierungscode ausgeführt wird". Sie sollten in der Lage sein, den Code dort auf den userId-Parameter zu haben. –