2010-12-23 18 views
11

Supongamos que tengo un método controlador de la siguiente manera:¿Se pueden obtener los valores de los parámetros utilizados en un método dentro de un ActionFilter?

[Audit] 
public JsonNetResult List(int start, int limit, string sort, string dir, string searchValue, SecurityInputModel securityData) 
{ 
    ... 
} 

y un atributo definido como tal:

[AttributeUsage(AttributeTargets.Method)] 
public class AuditAttribute : ActionFilterAttribute 
{ 

    public override void OnActionExecuted(ActionExecutedContext filterContext) 
    { 
     // auditing code here 

     base.OnActionExecuted(filterContext); 

    } 
} 

puedo obtener el valor de arranque/límite/tipo/etc desde el interior OnActionExecuted ()?

Respuesta

8

Puede obtener los valores de los parámetros en OnActionExecuting utilizando la propiedad ActionExecutingContext.ActionParameters.

Por ejemplo, el atributo siguiente prueba escribe los nombres y valores de los parámetros a la respuesta (la clase ItemModel anula ToString a sólo salida sus 2 propiedades):

public class CustomActionFilterAttribute : ActionFilterAttribute 
{ 
    public override void OnActionExecuting(ActionExecutingContext filterContext) 
    { 
     var response = filterContext.HttpContext.Response; 

     response.Write(filterContext.ActionDescriptor.ActionName); 
     response.Write("<br/>"); 

     foreach (var parameter in filterContext.ActionParameters) 
     { 
      response.Write(string.Format("{0}: {1}", parameter.Key, parameter.Value)); 
     } 
    } 
} 

[CustomActionFilter] 
[HttpPost] 
public ViewResult Test(ItemModel model) 
{ 
    return View(model); 
} 

alt text

+0

Esto sólo funciona para parámetros configurados en las rutas MVC, ¿verdad? ¿Los parámetros de URL arbitrarios no pasarán? – Mir

+1

@Mir ... Eso es verdad. Pero puede tener toda la información en la parte del objeto Solicitud del ActionContext. – maicalal

Cuestiones relacionadas