【问题标题】:ASP.NET Core not binding arguments from body after upgrade to 3.1升级到 3.1 后,ASP.NET Core 未绑定来自正文的参数
【发布时间】:2020-12-30 10:48:21
【问题描述】:

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

我的动作和班级是这样的

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

【问题讨论】:

  • 如果您怀疑它是 JSON 序列化程序,您可以将 Newtonsoft JSON 安装回 nuget.org/packages/Microsoft.AspNetCore.Mvc.NewtonsoftJson
  • 我需要做些什么来让 ASP 框架使用这个序列化的其他 JSON 吗?
  • 是的,你需要安装 nuget 包并像services.AddControllers().AddNewtonsoftJson();一样添加它,检查this

标签: c# asp.net-core json-serialization


【解决方案1】:

是的。这个错误的原因是新的 JSON 库。

出于某种原因System.Text.Json 不填充字段,它只填充属性。所以你需要改变你的类定义Bar来使用属性

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

序列化过程使用setter,所以不能省略。

【讨论】:

  • 幸运的是,无需更改代码中的任何其他内容即可完成此修复,因为获取和设置字段和属性的语法是相同的。
【解决方案2】:

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

只需安装以下 nuget 包:

Install-Package Microsoft.AspNetCore.Mvc.NewtonsoftJson

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

services.AddMvc().AddNewtonsoftJson();

然后您又回到了使用 JSON.NET,它是用于 .NET Core 2.X 项目的序列化程序。

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

【讨论】:

    猜你喜欢
    • 2021-02-26
    • 1970-01-01
    • 1970-01-01
    • 2021-08-09
    • 1970-01-01
    • 2015-11-07
    • 2021-09-25
    • 2021-10-13
    • 2020-05-25
    相关资源
    最近更新 更多