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/
我刚刚将 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/