ASP.NET 核心在升级到 3.1 后不绑定正文中的参数

ASP.NET Core not binding arguments from body after upgrade to 3.1

我刚刚将 ASP.NET 核心项目从 2.2 升级到 3.1,现在我的模型绑定不适用于 POST 请求。我读到默认的 JSON 序列化程序在 .NET Core 3 中从 Newtonsoft.JSON 更改为 System.Text.Json。这可能是原因吗?

我的动作和class看起来像这样

[HttpPost]
public IActionResult Foo([FromBody]Bar req)
public class Bar
{
    public string Fiz;
    public int Buzz;
}

是的。出现此错误的原因是新的 JSON 库。

出于某种原因 System.Text.Json 不填充字段,它只填充属性。因此,您需要更改 class 定义 Bar 以使用属性

public class Bar
{
    public string Fiz { get; set; }
    public int Buzz { get; set; }
}

序列化过程使用 setter,因此您不能省略它们。

我只是想指出,如果修改您的模型不适合您,那么您可以添加 JSON.NET 支持。

只需安装以下 nuget 包:

Install-Package Microsoft.AspNetCore.Mvc.NewtonsoftJson

然后在您的 startup.cs 中添加 MVC,执行:

services.AddMvc().AddNewtonsoftJson();

然后您将返回使用 JSON.NET,这是用于 .NET Core 2.X 项目的序列化程序。

https://dotnetcoretutorials.com/2019/12/19/using-newtonsoft-json-in-net-core-3-projects/