2015-07-27 1 views
1

У меня есть метод API, который принимает Dictionary<string, object>, который возвращается из свойства HttpActionExecutedContext.ActionContext.ActionArguments (используется в рамках фильтра действий WebApi). Мне нужно построить аналогичный словарь от ActionExecutedContext в фильтре действий MVC, чтобы я мог использовать тот же вызов API из фильтра mvc.Получить аргументы действия, похожие на webapi в mvc action filter

Я пробовал несколько подходов, но они не очень просты. Если есть простой способ создать словарь actionArguments из ActionExecutedContext, пожалуйста, дайте мне знать.

//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.?)   
    } 

ответ

3

Не уверен, если это существует для OnActionExecuted, но это, безусловно, существует для OnActionExecuting. Если вам это нужно в Executed (если оно не существует, я не думаю, что это так), вы можете временно сохранить его в фильтре, например:

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 
    } 
} 
+0

Спасибо за отзыв. Я знал о ActionParameters в ActionExecutingContext. Но понятия не имели, как его использовать. Ваш подход звучит разумно. – rawel