c# - 模型绑定(bind)从 2.2 更改为 3.0 Asp.Net Core

标签 c# asp.net-core model-view-controller

我正在尝试在 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 更改为 System.Text.Json,因此某些序列化行为将发生变化。

如果您希望它的行为像在 2.x 中那样,您可以将 Newtonsoft.Json 设置为默认值:

services.AddMvc()
    .AddNewtonsoftJson();

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

如果您想像使用新的 System.Text.Json 那样制作当前的 JSON 和类型序列化/反序列化,您可以在这里阅读: https://github.com/dotnet/corefx/issues/39473

这个问题是由 Stackoverflows Nick Craver 提出的,其中有自定义转换器可以满足您的需求,并且有迹象表明有计划在 5.0 中支持“更宽松”的反序列化。

关于c# - 模型绑定(bind)从 2.2 更改为 3.0 Asp.Net Core,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59135681/

相关文章:

java - 如何使用 JDialog 类删除或隐藏父窗口

c# - 从按日期范围查看的数据库数据导出到 csv asp.net mvc3

c# - ExecuteNonQuery() 语法错误 c#

c# - ASP.NET Core 2.x 中间件的自定义依赖注入(inject)解析器?

visual-studio - Visual Studio 2017:在已创建的Asp .Net Core Web应用程序上访问更改身份验证屏幕

c# - ASP.Net Core 1 日志记录错误 - 无法找到来自源应用程序的事件 ID xxxx 的描述

laravel - 创建新字段的迁移时,将数据从一个字段复制到另一个字段的最佳方法是什么?

php - 无法让 Controller 工作 - MVC

c# - 如何使用 LINQ 或响应式(Reactive)扩展拆分带有嵌入转换标记的列表?

c# - C# JITter 能否优化重复的委托(delegate)调用?