.NET 6 Web api:如何获取控制器中的原始正文内容

ste*_*e22 2 c# asp.net-core-webapi

我正在将 .NET 4.8 Web API 应用程序迁移到 6.0,但用于在控制器方法中检索原始正文内容的代码片段不再有效,并且始终返回空字符串。我所说的原始内容是指用于编写自定义日志的整个 json 结构。在post方法中运行的.net 4.8代码如下:

public async Task<IActionResult> PostAsync([FromBody] FooModel model)
{
    // some code
    string rawContent = string.Empty;
    using (var st = await this.Request.Content.ReadAsStreamAsync())
    {
       st.Seek(0, System.IO.SeekOrigin.Begin);
       using (var sr = new System.IO.StreamReader(st))
       {
            rawContent = sr.ReadToEnd();
       }
    }

    // some more code
}
Run Code Online (Sandbox Code Playgroud)

在.net 6中我这样改编:

    string rawContent = string.Empty;
    using (var reader = new StreamReader(Request.Body,
                  encoding: Encoding.UTF8, detectEncodingFromByteOrderMarks: false))
    {
        rawContent  = await reader.ReadToEndAsync();
    }
Run Code Online (Sandbox Code Playgroud)

尽管进行了一些调整,我仍无法恢复数据。有谁可以给​​我指路吗?谢谢。

斯蒂22

Md *_*ron 7

Web API 应用程序升级到 6.0,但用于在控制器方法中检索原始正文内容的代码段不再起作用,并且始终返回空字符串。

dotnet 6 Web API project好吧,我已经通过以下方式模拟了该问题,并且我收到了json我发送的信息PostMan

控制器:

    [HttpPost]
    public async Task<IActionResult> GetRawContent()
    {
        string rawContent = string.Empty;
        using (var reader = new StreamReader(Request.Body,
                      encoding: Encoding.UTF8, detectEncodingFromByteOrderMarks: false))
        {
            rawContent = await reader.ReadToEndAsync();
        }
       
        return Ok(rawContent);
       
    }
Run Code Online (Sandbox Code Playgroud)

输出:

在此输入图像描述

模拟:

在此输入图像描述

注意:当您发送raw内容时,您可以删除它,[FromBody] FooModel model因为这仅在我们明确使用时使用stricly typed model