使用[FromBody]时获取原始POST数据

时间:2016-06-15 15:37:55

标签: asp.net-core asp.net-core-mvc

我有一个在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)

3 个答案:

答案 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。同样适用于您的问题。