Можно ли получить значения параметров, используемые в методе, из ActionFilter? - PullRequest
11 голосов
/ 23 декабря 2010

Предположим, у меня есть такой метод контроллера:

[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);

    } 
}

можно ли получить значение start / limit / sort / etc изнутри OnActionExecuted ()?

1 Ответ

11 голосов
/ 23 декабря 2010

Вы можете получить значения параметров в 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);
}

alt text

...