13

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

[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() 中获取 start/limit/sort/etc 的值吗?

4

1 回答 1

14

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

例如,以下测试属性将参数名称和值写入响应(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);
}

替代文字

于 2010-12-23T03:35:32.837 回答