Как изменить входные параметры с помощью Action Filters - PullRequest
0 голосов
/ 17 октября 2018

Справочная информация:

Я пытаюсь устранить потенциальную проблему безопасности, чтобы удалить одиночные кавычки, введенные в качестве строковых параметров в мой метод WebAPI (это необходимо сделать во всем приложении).

Я попытался сделать это, создав Фильтр действий, который делает необходимые

public class ValidateActionParametersAttribute : ActionFilterAttribute, IActionFilter
    {
        public override void OnActionExecuting(HttpActionContext actionExecutedContext)
        {          
            var parameters = actionExecutedContext.ActionArguments;
            var parameterList = parameters.Values.ToList();
            parameterList.Where(x => x.GetType() == typeof(string)).ToList().ForEach(y => y = y.ToString().Replace("\'", ""));            
            base.OnActionExecuting(actionExecutedContext);
        }
    }

И зарегистрировал его глобально в моем WebApiConfig

config.Filters.Add(new ValidateActionParametersAttribute());

Но когда я проверилпосле размещения точки останова в коде изменения параметров, выполненные в ActionFilter, похоже, не отражаются.Кто-нибудь может подсказать мне, что я делаю не так?

1 Ответ

0 голосов
/ 17 октября 2018

Вы не обновляете значение в словаре аргументов, но заменяете только параметр y лямбда-функции, передаваемой в ForEach.

Так как ActionArguments - это словарь, вы можете выполнить следующее:

var stringArgs = context.ActionArguments.Where(pair => pair.Value is string).ToList();

foreach (var keyValue in stringArgs)
{
    var safeValue = ((string)keyValue.Value).Replace("\'", "");
    context.ActionArguments[keyValue.Key] = safeValue;
}

Это получит все аргументы, которые являются строками, и заменит их безопасной версией.

...