2011-08-12 9 views
12
[ApiBasicAuthorize] 
public ActionResult SignIn() 
{ 

} 

Tengo este filtro personalizado llamado ApiBasicAuthorize. ¿Es posible acceder a los datos de ApiBasicAuthorize (propiedades, etc.) dentro de la acción del controlador SignIn?Acceso a los datos del Filtro de acciones en la Acción del controlador

En caso negativo, ¿cómo paso los datos del filtro a la acción del controlador?

+0

qué método se le imperiosa de authrize_Attribute. puede agregar datos al diccionario de ruta, muéstrenos un código más suyo. –

+0

Estoy anulando el método OnAuthorization (AuthorizationContext filterContext). –

Respuesta

17

Hay un diccionario llamado elementos adjuntos al objeto HttpContext. Use este diccionario para almacenar elementos compartidos entre componentes durante una solicitud.

public override void OnAuthorization(AuthorizationContext filterContext) 
{ 
    filterContext.HttpContext.Items["key"] = "Save it for later"; 

    base.OnAuthorization(filterContext); 
} 

Entonces cualquier parte del código más adelante en la solicitud ...

var value = HttpContext.Current.Items["key"]; 
+1

Incluso la respuesta de Praveen funciona, pero he marcado esto como una respuesta porque HttpContext.Items es más apropiado para este propósito en lugar de RouteData.Values ​​ –

+2

@goths - Hola, ¿podría explicar por qué eligió 'HttpContext.Items' sobre' RouteData ¿? También vea: http://stackoverflow.com/a/1809541/538387 Gracias – Tohid

+0

Hola @goths, sí, también tengo curiosidad por saber por qué la primera es más "apropiada" que la segunda. Parece que ambos están cumpliendo el mismo propósito, por lo que se preguntan ¿qué limitaciones o intenciones separan a los dos? – Funka

5
public override void OnAuthorization(AuthorizationContext filterContext) 
    { 
     var rd = filterContext.RouteData; 

     //add data to route 
     rd.Values["key"]="Hello"; 

     base.OnAuthorization(filterContext); 
    } 



public ActionResult(string key) 
{ 
//key= Hello 
return View(); 
} 
Cuestiones relacionadas