在mvc动作过滤器中获取类似于webapi的Action参数

时间:2015-07-27 04:25:57

标签: asp.net-mvc asp.net-web-api action-filter

我有一个API方法接受从Dictionary<string, object>属性返回的HttpActionExecutedContext.ActionContext.ActionArguments(在WebApi操作过滤器中使用)。我需要在MVC动作过滤器中从ActionExecutedContext构造一个类似的字典,以便我也可以使用来自mvc过滤器的相同API调用。

我尝试了几种方法,但它们并不是非常明确的。如果有很简单的方法从ActionExecutedContext构造actionArguments字典,请告诉我。

    //webapi - working fine
    public override void OnActionExecuted(HttpActionExecutedContext context)
    {
        Call_A(context.ActionContext.ActionArguments)        
    }

    //mvc- need to find a way to get argument dictionary
    public override void OnActionExecuted(ActionExecutedContext context)
    {
        Call_A(context.?)        
    }

1 个答案:

答案 0 :(得分:3)

不确定OnActionExecuted是否存在,但OnActionExecuting肯定存在。如果你确实需要它执行(如果它不存在,我不认为它),那么你可以暂时将它存储在过滤器中,例如:

public IDictionary<string, object> actionParams { get; set; }

public override void OnActionExecuting(ActionExecutingContext context)
{
    this.actionParams = context.ActionParameters;
}

public override void OnActionExecuted(ActionExecutedContext context)
{
    foreach (var param in this.actionParams) {
        // param.Key
        // param.Value
    }
}
相关问题