2010-12-23 6 views
11

nehme ich an einen Controller Methode wie folgt haben:Kann man Parameterwerte aus einem ActionFilter in einer Methode abrufen?

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

und ein Attribut als solche definiert:

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

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

     base.OnActionExecuted(filterContext); 

    } 
} 

kann I auf den Wert von Start/Limit erhalten/Sortier-/etc von innen OnActionExecuted ()

Antwort

8

Sie können die Parameterwerte unter Verwendung der ActionExecutingContext.ActionParameters-Eigenschaft in OnActionExecuting abrufen.

Zum Beispiel der folgende Test Attribut die Parameternamen und Werte aus der Antwort schreibt (die ItemModel Klasse überschreibt ToString nur Ausgang seinen 2 Objekte):

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

Dies funktioniert nur für Parameter in den MVC Routes eingerichtet, richtig? Beliebige URL-Parameter werden nicht weitergeleitet? – Mir

+1

@Mir ... Das ist wahr. Sie können jedoch alle Informationen im Request-Objekt Teil des ActionContext haben. – maicalal

Verwandte Themen