Как получить значения входных параметров в фильтре пользовательских действий Web API - PullRequest
0 голосов
/ 11 декабря 2018

Я пишу предварительную логику для обработки проверки, которая будет кодировать значение запроса, если обнаружена какая-либо атака xss.Я использую AntiXSS для кодирования.Мне удалось выполнить задачу двумя способами:

  1. Сначала с помощью DelegatingHandler, который будет запускаться до вызова любого API.
  2. Затем создайте класс Base controller и переопределите метод ExecuteAsync класса Api Controller .

Теперь я хочу приступить к созданию настраиваемого фильтра действий для записи предварительной логики.Но я не могу получить параметры запроса, которые мне нужно кодировать.Ниже приведен код, который я использовал:

public class InputValidationCheck : ActionFilterAttribute
{
    public override void OnActionExecuting(HttpActionContext actionContext)
    {
        dynamic dynamicJson = JsonConvert.DeserializeObject(actionContext.Request.Content.ReadAsStringAsync().Result);

        //using regex to match the pattern for the Json request object and directly replacing and encoding the desired value

        string regexPattern = "(?<=: \")[^\",\r\n]*";
        System.Text.RegularExpressions.Regex rgx = new System.Text.RegularExpressions.Regex(regexPattern);

        //using REGEX's replace function to find the matching pattern and then replace the value with the encoded value
        dynamicJson = rgx.Replace(dynamicJson.ToString(), new MatchEvaluator((m) => { return Encoder.HtmlEncode(m.ToString()); }));

        //changing the request content with the modified request with header type as "application/json"
        actionContext.Request.Content = new StringContent(dynamicJson,
                                System.Text.Encoding.UTF8,
                                "application/json");//CONTENT-TYPE header
        Core.Logging.LogManager.LogVerbose(actionContext.Request.Content.ReadAsStringAsync().Result);

        //return response;
        //return base.ExecuteAsync(actionContext, cancellationToken);
    }
}

Я пытался actionContext.Request.Content.ReadAsStringAsync (). Результат , но мне не удалось получить значение параметров запроса из этого.Любая идея, что я делаю неправильно?

ОБНОВЛЕНИЕ Я использовал actionContext.ActionArguments.Values ​​, чтобы получить параметры.и он имеет счет 1. Но как я могу использовать его в моем коде ??

...