ASP.NET Core 6模型绑定:数值绑定到字符串参数是否为正常特性?
问题解答
这是正常特性,属于.NET 6中System.Text.Json的默认反序列化行为,并非模型绑定的异常问题。
核心原因
你使用的[FromBody]特性依赖System.Text.Json处理JSON请求体的反序列化,而非ASP.NET Core的传统模型绑定系统(后者主要处理表单数据、路由参数、查询字符串等场景)。System.Text.Json的默认配置允许将JSON数值类型隐式转换为.NET字符串类型:
- JSON中的数值(如
100.00、12345)会被转换为对应的字符串表示("100"、"12345"),并赋值给模型的字符串属性。
为什么模型绑定文档找不到相关说明
因为[FromBody]的JSON反序列化逻辑由System.Text.Json独立处理,不属于常规模型绑定的范畴,所以你查阅的模型绑定文档不会包含这部分内容。
如何禁止这种隐式转换(可选)
如果你希望严格校验类型,禁止数值转字符串,可以通过配置JsonOptions修改序列化行为:
// 在Program.cs中配置 builder.Services.AddControllers() .AddJsonOptions(options => { options.JsonSerializerOptions.NumberHandling = JsonNumberHandling.Strict; });
配置后,当请求体中出现数值类型绑定到字符串属性的情况,API会直接抛出反序列化异常,拒绝该请求。
官方文档相关说明
.NET官方文档明确指出:System.Text.Json的默认NumberHandling配置包含AllowReadingFromString和AllowWritingFromString,其中AllowReadingFromString允许将JSON数值、布尔值读取为.NET字符串类型。
内容的提问来源于stack exchange,提问作者Harsh Chaturvedi
相关产品推荐
相关产品推荐

