Я пишу предварительную логику для обработки проверки, которая будет кодировать значение запроса, если обнаружена какая-либо атака xss.Я использую AntiXSS для кодирования.Мне удалось выполнить задачу двумя способами:
- Сначала с помощью DelegatingHandler, который будет запускаться до вызова любого API.
- Затем создайте класс 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. Но как я могу использовать его в моем коде ??