2010-12-23 48 views
11

假設我有一個控制器的方法是這樣的:能從ActionFilter中獲取方法中使用的參數值嗎?

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

並且被定義爲這樣的屬性:(

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

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

     base.OnActionExecuted(filterContext); 

    } 
} 

我可以在啓動/限制的值/從內側OnActionExecuted排序/等)?

回答

8

您可以使用ActionExecutingContext.ActionParameters屬性獲取OnActionExecuting中的參數值。

例如,下面的測試屬性寫入參數名稱和值輸出到響應(在ItemModel類覆蓋ToString只輸出其2個屬性):

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

這隻適用於MVC路由中設置的參數,對不對? 任意URL參數將不會通過? – Mir 2016-01-13 21:59:08

相關問題