可以从ActionFilter中获取方法中使用的参数值吗?

alp*_*ogg 11 c# parameters action-filter

假设我有一个像这样的控制器方法:

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

以及如此定义的属性:

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

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

        base.OnActionExecuted(filterContext);

    } 
}
Run Code Online (Sandbox Code Playgroud)

我可以从OnActionExecuted()里面得到start/limit/sort/etc的值吗?

Jef*_*ata 11

您可以OnActionExecuting使用ActionExecutingContext.ActionParameters属性获取参数值.

例如,以下test属性将参数名称和值写入响应(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);
}
Run Code Online (Sandbox Code Playgroud)

替代文字