繁体   English   中英

模型绑定从 2.2 更改为 3.0 Asp.NetCore

[英]Has model binding changed from 2.2 to 3.0 Asp.NetCore

我正在尝试访问 3.0 api 上的端点。 我以与现有应用程序相同的方式传递所有参数,使用字符串类型的字典。 但是现在我收到了一个 400 错误的请求,这是因为属性 UserId 是一个 int。

public class ConfirmCreatedRequest
{
    public int UserId { get; set; }
    public string Password { get; set; }
    public string MemorableWord { get; set; }
}

下面是使用原始字典并将字典更改为字符串、对象的 json 示例。

"{\"UserId\":\"90744\",\"Password\":\"\",\"MemorableWord\":\"\"}"
"{\"UserId\":90750,\"Password\":\"\",\"MemorableWord\":\"\"}"

问题是我不想这样做,因为它不是类型安全的。

我想知道 3.0 中发生了什么变化以及它是否已在 3.0.1 中修复

默认序列化Newtonsoft.Json已从Newtonsoft.Json更改为System.Text.Json ,因此某些序列化行为将发生变化。

如果您希望它的行为与2.x一样,您可以使用以下命令将Newtonsoft.Json设为默认值:

services.AddMvc()
    .AddNewtonsoftJson();

请参阅此处的文档: https : //docs.microsoft.com/en-us/aspnet/core/migration/22-to-30? view = aspnetcore-3.0 & tabs = visual-studio#jsonnet- support

如果您想制作当前的 JSON 并像他们对新System.Text.Json所做的那样输入序列化/反序列化,您可以在这里阅读: https : //github.com/dotnet/corefx/issues/39473

这个问题是由 Stackoverflows Nick Craver 提出的,其中有自定义转换器可以为您提供所需的内容,并表明有计划支持5.0 “更宽松”的反序列化。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM