mvc example custom asp.net-mvc controller authorize-attribute

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:

  1. El constructor de un Controlador se dispara antes de Autorización Activada , por lo que el elemento aún no se configurará.
  2. El HttpContext aún no está configurado en el constructor del Controlador.

Solución alternativa

  1. Crea un nuevo OAuthController : Controller
  2. Anular la OnAuthorization
  3. Mueva la lógica de su filtro a OAuthController.OnAuthorization
  4. Establezca un campo protected (es decir, el protected object myAuthData ) en OAuthController
  5. Haga que sus otros controladores hereden de OAuthController lugar de Controller
  6. 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.