一个解决方法添加Apicontrller 不使用Frombody,直接类对象,
一个是添加NewtonsoftJson,字符串和别的类型自动转换
删除了对 Newtonsoft.Json
的引用,将任何自动 Json
转换留给 System.Text.Json
处理。 事实证明,这是问题的原因,因为 System.Text.Json
不那么灵活(Microsoft 自己是这样说的,并且打算如此:How to migrate from Newtonsoft.Json to System.Text.Json) .
在 .NET Core 3 之前,ASP.NET Core 内部使用 Newtonsoft.Json
,现在改用 System.Text.Json
。
一个例子是数字字段,例如 MyClass.Value1
。 如果您从 Javascript 传递"10"
或 10
,Newtonsoft.Json
将处理它并将两者都识别为 10
。默认情况下使用 System.Text.Json
,该字段不能包含引号,如果您在 Json
中发布它,您将得到一个空 [FromBody]
值。
解决此问题的最快方法是在这些情况下恢复为 Newtonsoft.Json
,这很容易通过以下方式完成:
- 安装 Nuget 包
Microsoft.AspNetCore.Mvc.NewtonsoftJson
- 在
Startup.cs
中,更新以下方法:
public void ConfigureServices(IServiceCollection services)
{
services.AddRazorPages().AddNewtonsoftJson();
//All your other code:
//...
}
这是直接从这里获取的。
进行此更改后,一切再次按预期工作。
我知道可以使用自定义解析器配置 System.Text.Json
来处理这些情况(我在其他地方确实使用过),但我有几十种 POST
方法,而不是更新所有方法以使用新方法, 如上所述,这样做要容易得多。
转载请注明:SuperIT » netcore升级后frombody一直报null,