asp.net-mvc - example - authorize roles mvc 5
¿Cómo puedo pasar datos de un AuthorizeAttribute al Controller? (1)
Respuesta original
Deberías poder hacer esto en tu filtro
filterContext.HttpContext.Items["test"] = "foo";
Y luego esto en tu acción
_yourVariable = HttpContext.Items["test"];
Probablemente quieras usar una clave más única que "test"
, pero esa es la idea.
EDITAR Hay dos razones por las que hacemos esto en la acción en lugar del constructor:
- El constructor de un Controlador se dispara antes de Autorización Activada , por lo que el elemento aún no se configurará.
- El HttpContext aún no está configurado en el constructor del Controlador.
Solución alternativa
- Crea un nuevo
OAuthController : Controller
- Anular la
OnAuthorization
- Mueva la lógica de su filtro a
OAuthController.OnAuthorization
- Establezca un campo
protected
(es decir, elprotected object myAuthData
) enOAuthController
- Haga que sus otros controladores hereden de
OAuthController
lugar deController
- Sus otros controladores pueden acceder
myAuthData
.
Creé un AuthorizeAttribute personalizado que verifica algunas credenciales de OAuth que se envían dentro del encabezado HTTP. Estoy usando algunas de estas credenciales para identificar quién está haciendo la solicitud. Una vez que analizo esta información en AuthorizeAttribute, ¿hay alguna forma de pasarla para que los datos puedan asignarse a una variable de instancia del Controlador? Luego, en cualquier lugar de mi Controlador, tendré el ID de la parte solicitante.