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
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