Получение размера запроса в IActionFilter OnActionExecuting () - PullRequest
1 голос
/ 27 сентября 2019

Настройка проекта: Asp .NET core 2.1, Web Api в среде Docker.

Я хочу получить размер запросов GET с параметрами запроса в нашем API для целей регистрации.У меня есть фильтр действий, реализующий IActionFilter в проекте.OnActionExecuting () - это метод, в котором я интерпретирую запрос для этой цели.

Но я всегда получаю нулевое значение в context.HttpContext.Request.ContentLength свойство.Кроме того, прочитайте тело считывателем потока в текстовой переменной, которая также пуста.Это допустимое место, чтобы проверить это, или я имею в виду другое свойство ActionExecutingContext?

public void OnActionExecuting(ActionExecutingContext context)
{

string requestSize = "";

//Try 1:
requestSize = Convert.ToString(context.HttpContext.Request.ContentLength);

//Try 2:
//Since the Try 1 is null, following doesn't really matter. But still tried.
using (var bodyReader = new StreamReader(context.HttpContext.Request.Body))
{
     var bodyAsText = bodyReader.ReadToEnd();
     if (string.IsNullOrWhiteSpace(bodyAsText) == false)
     {
     requestSize = bodyAsText.Length;
     }
}

// Console.WriteLine(requestSize );

}

Ожидается номер байта для размера запроса, но он становится нулевым.

1 Ответ

1 голос
/ 27 сентября 2019

Является ли это допустимым местом для проверки

NO

У запросов GET отсутствует BODY.

ContentLength равен нулю и пустой поток тела - ожидаемое поведение для запросов GET.

Если вам нужен доступ к строкам запроса, вам нужно проверить запрос и извлечь строку запроса

context.HttpContext.Request.QueryString
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...