gpt4 book ai didi

c# - 发布到 ASP.NET Core 3.1 Web 应用程序时, "[FromBody]MyClass data"通常为空

转载 作者:行者123 更新时间:2023-12-04 12:11:36 24 4
gpt4 key购买 nike

我最近在从 .NET Core 2.2 升级到 3.1 后遇到了这个有趣(令人沮丧)的问题。以前,我会将数据 POST 到 Web 应用程序,接收方法如下所示:

public IActionResult OnPostAddNewDataAsync([FromBody]MyClass data)
{
//...
}

哪里 MyClass可能是这样的:
public class MyClass
{
public string Field1 {get; set;}
public integer Value1 {get; set;}
}

(作为引用,要从 Javascript 访问端点,您可以这样做:
 await PostDataAsync("AddNewData", {
"Field1": "Hello I am",
"Value1": 7
});

async function PostDataAsync(handler, data)
{
return await $.ajax({
url: window.location.pathname + "?handler=" + handler,
type: "POST",
contentType: "application/json",
headers:
{
RequestVerificationToken: $('input:hidden[name="__RequestVerificationToken"]').val()
},
data: JSON.stringify(data)
});
}

我花了一段时间才弄明白!)。

这工作得很好。

更新 .NET Core 3.1 后,我的许多 POST 方法停止工作,并且 [FromBody]值为空。

注意:作为升级到 .NET Core 3.1 的一部分,我删除了对 Newtonsoft.Json 的引用。 ,决定尝试使用新的 System.Text.Json .这将变得很重要!

最佳答案

如前所述,引用 Newtonsoft.Json被删除,留下任何自动 Json 转换由 System.Text.Json 处理.事实证明,这是导致问题的原因 System.Text.Json不那么灵活(微软自己这么说,而且它的目的是这样: 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]值(value)。

解决此问题的最快方法是恢复到 Newtonsoft.Json对于这些情况,这很容易做到:

  • 安装 Nuget 包 Microsoft.AspNetCore.Mvc.NewtonsoftJson
  • 在 Startup.cs 中,更新以下方法:

  • .
    public void ConfigureServices(IServiceCollection services)
    {
    services.AddRazorPages().AddNewtonsoftJson();

    //All your other code:
    //...
    }

    这是直接取自 here .

    进行此更改后,一切都再次按预期工作。

    我知道 System.Text.Json可以使用自定义解析器配置来处理这些类型的情况(我在其他地方使用过),但是我有几十个 POST 方法,而不是更新所有这些方法以使用新方法,按照描述的方式执行要容易得多以上。

    关于c# - 发布到 ASP.NET Core 3.1 Web 应用程序时, "[FromBody]MyClass data"通常为空,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60535734/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com