Mam niestandardowy atrybut o nazwie AuthoriseAttribute którego konstruktor wygląda następująco:Jak podłączyć parametry metody do atrybutu niestandardowego
public AuthoriseAttribute(int userId)
{
.. blah
}
ta jest stosowana z metodą zwaną GetUserDetails()
takiego:
[Authorise(????????)]
public UserDetailsDto GetUserDetails(int userId)
{
.. blah
}
Na środowisko wykonawcze, obecność atrybutu Autoryzuj powoduje uruchomienie kodu autoryzacyjnego, który wymaga identyfikatora użytkownika. Oczywiście można to wyodrębnić z parametru metody GetUserDetails()
, ale oznacza to, że kod autoryzacji zależy od parametru danej metody, któremu nadano konkretną nazwę.
Chciałbym móc przekazać rzeczywistą wartość parametru userId
do atrybutu, tak aby kod autoryzacji działał z wartością przekazaną do atrybutu (tj. Nie do parametru metody), którego nazwa jest znana. .
Coś jak ten (który nie działa):
[Authorise(userId)]
public UserDetailsDto GetUserDetails(int userId)
{
.. blah
}
Czy coś takiego jest możliwe?
Nie jest to niemożliwe. Atrybuty to metadane. Wartości parametrów muszą być wartością stałą. – vcsjones
Jest coś, czego nie rozumiem - dlaczego miałbyś chcieć autoryzować parametr metody?IMO - może być konieczne autoryzowanie wywołującego metody - czy to prawda? – Sunny
To, co opisujesz, nie może zostać wykonane bezpośrednio, ponieważ jestem pewny, że błąd kompilatora ci powiedział. Przydałoby się wiedzieć, jak działa "obecność atrybutu Autoryzuj powoduje uruchomienie kodu autoryzacyjnego". Powinieneś być w stanie odczytać kod w parametrze userId. –