Почему мой Request.BodyReader пуст при добавлении параметров запроса (ASP.NET Core 3.0) - PullRequest
2 голосов
/ 11 октября 2019

Я мигрирую с ASP.NET Core 2.2 на 3.0 и теперь у меня проблема. Если я напишу код, подобный этому:

[HttpPost("test")]
public async Task Test(object o) {
    HttpContext.Request.EnableBuffering();
    var result = await HttpContext.Request.BodyReader.ReadAsync();
    var buffer = result.Buffer;
    Console.WriteLine(System.Text.Encoding.Default.GetString(buffer.FirstSpan));
    HttpContext.Request.BodyReader.AdvanceTo(buffer.End);
}

Я получу пустое сообщение в консоли, но если я удалю параметр

[HttpPost("test")]
public async Task Test() {
    HttpContext.Request.EnableBuffering();
    var result = await HttpContext.Request.BodyReader.ReadAsync();
    var buffer = result.Buffer;
    Console.WriteLine(System.Text.Encoding.Default.GetString(buffer.FirstSpan));
    HttpContext.Request.BodyReader.AdvanceTo(buffer.End);
}

, я получу сообщение от тела

curl -X POST \ http://localhost:5000/test \ -H 'Тип содержимого: application / json' \ -d '{"test": 123}'

1 Ответ

0 голосов
/ 24 октября 2019

У меня была похожая проблема - регистрация тел запросов для тел запросов webhook.

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

в файле startup.cd, добавьте это в метод Configure ():

app.Use((context, next) =>
        {
            context.Request.EnableBuffering();
            return next();
        });

Я нашел решение здесь: https://github.com/aspnet/AspNetCore/issues/15009#issuecomment-542291956 (Thratcherнаписал)

...