好的,所以我一直在动脑筋,无法终生理解为什么完全相同的代码在.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的项目中,但是如果删除,它仍然无法正常工作。
有什么想法我可能做错了吗?
答案 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]
,它应该可以正常工作。