Tengo un atributo personalizado denominado AuthoriseAttribute cuyo constructor se ve así:Cómo conectar los parámetros del método en atributo personalizado
public AuthoriseAttribute(int userId)
{
.. blah
}
Esto se utiliza con un método llamado GetUserDetails()
así:
[Authorise(????????)]
public UserDetailsDto GetUserDetails(int userId)
{
.. blah
}
En tiempo de ejecución, la presencia del atributo Authorize provoca la ejecución de algún código de autorización que requiere la identificación del usuario. Obviamente, esto se puede extraer del parámetro del método GetUserDetails()
, pero esto significa que el código de autorización depende de que al parámetro del método se le dé un nombre particular.
Me gustaría poder pasar el valor real del parámetro userId
en el atributo, para que el código de autorización funcione con el valor pasado al atributo (es decir, no el parámetro del método), cuyo nombre se conoce .
Algo como esto (que no funciona):
[Authorise(userId)]
public UserDetailsDto GetUserDetails(int userId)
{
.. blah
}
¿Es posible tal cosa?
No, no es posible. Los atributos son metadatos. Los valores de los parámetros deben ser un valor constante. – vcsjones
Hay algo que no entiendo: ¿por qué querrías autorizar un parámetro de método?OMI: es posible que deba autorizar a la persona que llama del método: ¿es correcto? – Sunny
Lo que describes no se puede hacer directamente, ya que estoy seguro de que el error del compilador te lo comunicó. Sería útil saber cómo está funcionando la frase "la presencia del atributo Autorizar hace que se ejecute algún código de autorización". Debería poder tener el código ahí para ver el parámetro userId. –