我有一个在ASP.NET Core 1.0 RC2上运行的控制器,我想将原始POST数据转储到遥测中,因为ApplicationInsights不会为您执行此操作。我的代码看起来像这样
add_index :visits, [:user_id, :created_at]
add_index :impressions, [:user_id, :created_at]
但字符串“body”总是空着。如果我从函数签名中删除[FromBody]装饰,那么此代码可以工作,但RequestData对象只包含null,这不是我想要的。
我唯一能想到的就是将RequestData转换回Json字符串,但这感觉很笨拙而且很慢。
(编辑:POST数据是Json)
答案 0 :(得分:8)
您需要启用缓冲请求正文:
services.Configure<FormOptions>(options => options.BufferBody = true);
https://github.com/aspnet/HttpAbstractions/blob/dev/src/Microsoft.AspNetCore.Http/Features/FormOptions.cs#L20
答案 1 :(得分:3)
我发现解决此问题的最简单方法是使用 jObject 作为模型。 并在标题处以 Content-Type:application / json 发送请求。
使用类似NewtonSoft的json dll:
[HttpPost]
public IActionResult Post([FromBody] jObject RequestData)
{
string str = RequestData["key"];
return Ok();
}
这对我有用
答案 2 :(得分:0)
请求流已被读取,因此您可以在此处执行的操作启用快退
See solution here for reading json from body。同样适用于您的问题。