He creado 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 hace 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.¿Cómo puedo pasar datos de un AuthorizeAttribute al controlador?
14
A
Respuesta
12
Respuesta original
Usted debe ser capaz de hacer esto en su filtro
filterContext.HttpContext.Items["test"] = "foo";
Y entonces este en su acción
_yourVariable = HttpContext.Items["test"];
Usted probablemente querrá use 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 más que el constructor:
- A Controller's constructor fires before OnAuthorization, por lo que aún no se establecerá el artículo.
- El HttpContext aún no está configurado en el constructor del Controlador.
solución alternativa
- Crear un nuevo
OAuthController : Controller
- Override
OnAuthorization
- Mover la lógica de su filtro en
OAuthController.OnAuthorization
- establecer un campo
protected
(es decir,protected object myAuthData
) enOAuthController
- Haga que sus otros controladores hereden de
OAuthController
en lugar deController
- Sus otros controladores pueden tener acceso a
myAuthData
.
Cuestiones relacionadas
- 1. jQuery, ¿cómo puedo pasar args al controlador de eventos?
- 2. cómo pasar un parámetro al controlador de un evento
- 3. Cómo pasar datos de formulario y datos jqGrid (editUrl) al controlador al mismo tiempo
- 4. ASP.NET MVC Pasar datos de la vista al controlador
- 5. Cómo pasar un argumento al controlador de eventos en tkinter?
- 6. Dojo: cómo pasar parámetros personalizados al controlador de eventos
- 7. Con python socketserver ¿cómo puedo pasar una variable al constructor de la clase de controlador
- 8. ¿Cómo pasar elementos seleccionados de la lista multiselect al controlador?
- 9. cómo pasar datos al hilo en ejecución
- 10. ASP.NET MVC - pasar parámetros al controlador
- 11. Obtener datos de modelo en AuthorizeAttribute en MVC 3
- 12. ASP.NET MVC pasar un ID en una ActionLink al controlador
- 13. Pasa los datos al controlador anterior
- 14. ¿Cómo puedo pasar mensajes de error de validación a un método en un controlador diferente?
- 15. Cómo pasar datos de un QDialog?
- 16. ASP.NET MVC 3 Razor: Pasar datos de la vista al controlador
- 17. ¿Cómo puedo instalar un controlador usando InnoSetup?
- 18. Cómo pasar todo un modelo de vista de vuelta al controlador
- 19. ¿Cómo creo un AuthorizeAttribute personalizado que sea específico para el área, el controlador y la acción?
- 20. R: Al pasar un marco de datos por referencia
- 21. Pasar una colección de objetos al controlador MVC usando $ .post
- 22. ¿Cómo pasar parámetros de un controlador a una plantilla?
- 23. Cómo utilizar Custom AuthorizeAttribute para el controlador que utiliza el valor del parámetro?
- 24. ¿Cómo puedo pasar datos de un manejador SOAP a un cliente de servicio web?
- 25. ¿Cómo puedo pasar datos de Perl a Java?
- 26. Pasar un HttpPostedFileBase a un método de controlador
- 27. ¿Cómo se accede al controlador de vista de un súper?
- 28. ¿Cómo puedo pasar múltiples archivos fuente al compilador de TypeScript?
- 29. ¿Cómo puedo anular un controlador Magento?
- 30. Pasar datos de un controlador de vista a otro; iOS <= 4 vs iOS 5
Hmm ... cuando agregué un Constructor a mi Controlador para configurar esta variable, rompió todo mi Enlace de Modelo (arroja un error). ¿Alguna otra idea? – BigOmega
@Ryan Originalmente tuve esto anotado en mi respuesta, pero lo eliminé. Tal vez debería volver a instalarlo. De todos modos, el constructor de un Controlador dispara ** antes ** de Autorización Activada, por lo que el elemento no se configurará todavía. Además, el Controlador ni siquiera tiene un HttpContext aún en ese punto. Necesitas hacer esto en tu Acción. –
@Ryan Una alternativa sería crear 'OAuthController: Controller', anular' OnAuthorization' como se menciona en la publicación a la que se vinculó, establecerlo como miembro 'protected' y hacer que sus otros controladores hereden de él. –