2010-12-23 13 views
11

Bunun gibi bir denetleyici yöntemim var:Bir yöntemde kullanılan parametre değerlerini ActionFilter içinden alabilir miyim?

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

ve

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

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

     base.OnActionExecuted(filterContext); 

    } 
} 

olarak tanımlanan bir öznitelik içinde OnActionExecuted() içinden start/limit/sort/etc değerine ulaşabilir miyim ?

cevap

8

OnActionExecuting parametresi değerlerini ActionExecutingContext.ActionParameters özelliğini kullanarak alabilirsiniz. Örneğin

, aşağıdaki test niteliği tepkisi ortaya parametre adları ve değerleri yazar (ItemModel sınıf ToString sadece çıkış olarak 2 özelliklerini geçersiz kılar): için

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

Bu, yalnızca MVC Rotalarında kurulan parametreler, doğru mu? İsteğe Bağlı URL Parametreleri geçmiyor mu? – Mir

+1

@Mir ... Thats true. Ancak, tüm bilgileri ActionContext'in Request nesnesi bölümünde bulabilirsiniz. – maicalal

İlgili konular