use*_*620 5 c# async-await asp.net-core-3.0
我从 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);
}
Run Code Online (Sandbox Code Playgroud)
我将在控制台中收到一条空消息,但如果我删除参数
[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);
}
Run Code Online (Sandbox Code Playgroud)
, 我收到来自 body 的消息
curl -X POST \ http://localhost:5000/test \ -H 'Content-Type: application/json' \ -d '{ "test":123 }'
我遇到了类似的问题,记录 webhook 请求主体的请求主体。
您需要首先为请求正文启用缓冲,否则,它是一个只进流,在使用时将为空(并且无法回滚)。
在Startup.cs中,将以下内容添加到Configure()方法中:
app.Use((context, next) =>
{
context.Request.EnableBuffering();
return next();
});
Run Code Online (Sandbox Code Playgroud)
我在这里找到了解决方案:https://github.com/aspnet/AspNetCore/issues/15009#issuecomment-542291956(Thratcher写的)