2012-08-30 9 views
10

Creé un Action Filter personalizado sin problema.¿Filtros de acción MVC usando parámetros pasados ​​a ActionResult?

Pero me gustaría modificar el filtro de acción para usar algunos de los parámetros realmente pasados ​​a mi método.

Así que si tengo el siguiente método:

[HttpPost] 
[MyAttribute] 
public ActionResult ViewUserDetails(Guid userId) 
{ 
    // Do something 
} 

¿Cómo puedo obtener acceso a la ID de usuario desde dentro MyAttribute? ¿Hay alguna manera en que puedo pasarlo directamente?

+0

No creo que haya una manera de acceder al ID de USUARIO que se pasa a ese parámetro. Sin embargo, probablemente haya una forma de acceder al ID de usuario del usuario que inició sesión en su sistema. Y es posible que pueda acceder a cualquier cosa en los datos de Vista ... pero no recomendaría ir por esa ruta, incluso si pudiera. – AwDogsGo2Heaven

Respuesta

13

Puede probar OnActionExecuting anular, donde tiene acceso a los parámetros de acción.

public class MyAttribute: ActionFilterAttribute 
{ 
    public override void OnActionExecuting(ActionExecutingContext filterContext) 
    {  
     if (filterContext.ActionParameters.ContainsKey("userId")) 
     { 
      var userId = filterContext.ActionParameters["userId"] as Guid; 
      if (userId != null) 
      { 
       // Really?! Great!    
      } 
     } 
    } 
} 
0

Puede crear un atributo personalizado que se deriva de FilterAttribute e implementa IAuthorizationFilter.

También debe poder obtener la información del usuario en el método OnAuthorization accediendo al filterContext.HttpContext.User.Identity sin la necesidad de pasar el ID de usuario.

+0

No creo que esté necesariamente buscando la identificación de los usuarios que iniciaron sesión, parece más como si estuviera haciendo una página de administrador para ver a cualquier usuario. –

Cuestiones relacionadas