.Net Core 3.0中的请求正文为空

时间:2019-12-04 22:16:18

标签: c# .net-core .net-core-3.0

好的,所以我一直在动脑筋,无法终生理解为什么完全相同的代码在.Net Core 2.2中可以完美地工作,而在.Net Core 3.0中返回空字符串。

我正在运行的这段代码是:

var bodyContent = await Request.GetRequestBodyAsync();
var body = new MemoryStream(Encoding.UTF8.GetBytes(bodyContent));

我这样称呼这个扩展名:

{{1}}

在.Net Core 2.2中,我完全按照需要获取了已发送有效内容的主体,但是在.Net Core 3.0中,我得到了一个空字符串。

我在启动时使用扩展名将Newtonsoft添加到.Net Core 3.0的项目中,但是如果删除,它仍然无法正常工作。

有什么想法我可能做错了吗?

2 个答案:

答案 0 :(得分:4)

将此中间件添加到启动类中:

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

答案 1 :(得分:0)

我实际上发现了这一点,在控制器方法中,我使用[FromBody]读取了主体,因此主体被读取了两次,而第一次没有回绕。

public async Task<ActionResult<string>> PaymentRequestCallbackAsync(/*[FromBody] SecretModel model*/)
{
    var body = await Request.GetRequestBodyAsync();
    var stream = new MemoryStream(Encoding.UTF8.GetBytes(body));
    return body;
}

因此,删除[FromBody],它应该可以正常工作。