await HttpContent.CopyToAsync () приводит к пустому целевому потоку - PullRequest
0 голосов
/ 26 февраля 2019

Я пытаюсь (и не могу) получить фактическую строку JSON из объекта Request.HttpContent.

Вот что я делаю:

private async Task<string> GetRequestBodyAsString(HttpContent content)
{
    string result;

    using (var streamCopy = new MemoryStream())
    {
        await content.CopyToAsync(streamCopy);
        streamCopy.Position = 0;
        result = new StreamReader(streamCopy).ReadToEnd();
    }

    return result;
}

Моя проблема в том, что при выполнении этого кода я всегда получаю пустую строку - если я не использую точку останова на строке, которая устанавливаетпозиция streamCopy обнуляется, что заставляет меня думать, что код просто продолжает выполняться после запуска метода CopyToAsync.

Если я изменю его на:

using (var streamCopy = new MemoryStream())
    {
        do
        {
            count++;
            await content.CopyToAsync(streamCopy);
        } while (streamCopy.Length == 0);

        streamCopy.Position = 0;
        result = new StreamReader(streamCopy).ReadToEnd();
    }

, он неизменно будет работать правильно (например, результат будет содержать JSON, но это пахнет ... фол.

Чтоя здесь не так делаю?

...