ASP.NET Core Web API:PUT请求对象数组绑定失败问题
问题解决方法
核心问题及对应解决方案如下:
1. 将ReadingSet中的Readings字段改为属性
ASP.NET Core模型绑定默认仅处理带get/set访问器的公共属性,你当前定义的Readings是公共字段,无法被自动绑定。修改代码如下:
public class ReadingSet { // 替换为带get/set的自动属性,保留默认初始化逻辑 public List<Reading> Readings { get; set; } = new List<Reading>(); public ReadingSet() { } public ReadingSet(List<Reading> readings) { // 直接赋值即可,无需循环添加元素 Readings = readings; } }
2. 明确指定参数绑定来源(可选但推荐)
在控制器接口的参数上添加[FromBody]特性,明确告知框架从HTTP请求体中读取JSON数据进行绑定:
[HttpPut] public async Task<ActionResult<Score>> ComputeScore([FromBody] ReadingSet readings) { // ... }
额外兼容处理:字符串转整数的绑定
你提交的JSON中value是字符串类型(如"37"),但Reading类的Value是int类型。默认情况下System.Text.Json会自动完成字符串到整数的转换,无需额外操作。若遇到转换失败的场景,可以给Value属性添加特性显式允许该转换:
using System.Text.Json.Serialization; public class Reading { public string Type {get; set;} = ""; [JsonNumberHandling(JsonNumberHandling.AllowReadingFromString)] public int Value {get; set;} public Reading() { } public Reading(string type, int value) { Type = type; Value = value; } }
内容的提问来源于stack exchange,提问作者cbutler
相关产品推荐
相关产品推荐

