asp.net-core - 使用 [FromBody] 时获取原始 POST 数据

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

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

相关文章:

c# - 模型状态错误过滤器

asp.net-core - 如何更改 ASP.NET 5 中通过 IHostingEnvironment 提供的默认环境值?

asp.net-core - 使用 .Net Core 中的 PKCE 和 Okta 从 Swagger UI 连接 OpenID

c# - 从 URL 中隐藏 Controller 名称

c# - 在 UserManager 上等待导致错误在上一个操作完成之前在此上下文上启动了第二个操作

asp.net-core-mvc - ASP.NET Core 2 MVC - Font-awesome woff/2 ttf 未在生产中加载

c# - 如何读取 ASP .NET Core Razor Pages 中的连接字符串

mysql - Entity Framework 核心与字段列表中的mysql未知列

c# - appsettings.json 中的 ASP.NET Core 强类型选项

asp.net-mvc - 为 dnx rc2 运行 MVC 6 ASP.NET 5 本地化示例