我有一个在 ASP.NET Core 1.0 RC2 上运行的 Controller ,我想将原始 POST 数据转储到遥测中,因为 ApplicationInsights 无法为您执行此操作。我的代码如下所示
[HttpPost]
[Produces("application/json")]
public IActionResult Post([FromBody] RequestClass RequestData)
{
var stream = this.HttpContext.Request.Body;
stream.Position = 0;
using (var reader = new StreamReader(stream))
{
string body = reader.ReadToEnd();
Telemetry.TrackTrace(body, Microsoft.ApplicationInsights.DataContracts.SeverityLevel.Information);
}
return Ok();
}
但是字符串“body”总是空的。如果我从函数签名中删除 [FromBody] 装饰,则此代码可以工作,但 RequestData 对象仅包含 null,这不是我想要的。
我唯一能想到的就是将 RequestData 转换回 Json 字符串,但这感觉笨重且缓慢。
(编辑:POST 数据是 Json)
最佳答案
您需要启用缓冲请求正文:
services.Configure<FormOptions>(options => options.BufferBody = true);
https://github.com/aspnet/HttpAbstractions/blob/dev/src/Microsoft.AspNetCore.Http/Features/FormOptions.cs#L20
关于asp.net-core - 使用 [FromBody] 时获取原始 POST 数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37839907/