You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

API控制器[FromBody]无法正确获取数据,数值字段全为0

问题解决方法

核心问题分析

  1. JSON请求体中数值以字符串类型传递(如"ID":"1"),但模型字段定义为int/double,默认绑定规则无法自动转换,导致字段取默认值0。
  2. 若使用ASP.NET Core 3.0+,默认序列化器是System.Text.Json,但模型中用的是Newtonsoft.Json的[JsonProperty]特性,两者不兼容,导致属性名映射失败。
  3. 带"data"嵌套的请求体结构与接收模型不匹配,无法正确绑定。

解决方案

1. 修正JSON请求体的数值类型

将字符串格式的数值改为纯数字,确保类型匹配:

{
  "ID": 1,
  "Temp": 37,
  "Humidity": 42,
  "WindSpeed": 12,
  "SoilMoisture": 14
}

2. 统一序列化特性

根据你使用的序列化框架调整模型特性:

  • 使用System.Text.Json(ASP.NET Core默认)
    替换[JsonProperty]为[JsonPropertyName](需引用System.Text.Json.Serialization命名空间):

    using System.Text.Json.Serialization;
    
    public class DataInfo
    {
        [JsonPropertyName("ID")]
        public int JId { get; set; }
        [JsonPropertyName("Temp")]
        public double JTemperature { get; set; }
        [JsonPropertyName("Humidity")]
        public double JHumidity { get; set; }
        [JsonPropertyName("WindSpeed")]
        public double JWindSpd { get; set; }
        
        [JsonPropertyName("SoilMoisture")]
        public double JSM { get; set; }
    }
    
  • 坚持用Newtonsoft.Json
    在项目配置中替换默认序列化器(以.NET 6+为例,在Program.cs中):

    builder.Services.AddControllers().AddNewtonsoftJson();
    

3. 处理嵌套请求体(可选)

如果需要支持带"data"嵌套的请求体,需创建包装类并修改控制器:

// 新增包装类
public class DataInfoWrapper
{
    public DataInfo data { get; set; }
}

// 控制器修改接收参数
[HttpPatch("update")]
public async Task<ActionResult<Device>> Update([FromBody] DataInfoWrapper wrapper)
{
    if (wrapper?.data == null)
    {
        return BadRequest("invalid request data");
    }
    var data = wrapper.data;
    // 后续原有逻辑不变
}

4. 添加模型验证排查错误

在控制器中检查ModelState,可以获取具体的绑定错误信息,方便调试:

[HttpPatch("update")]
public async Task<ActionResult<Device>> Update([FromBody] DataInfo data)
{
    if (!ModelState.IsValid)
    {
        return BadRequest(ModelState); // 返回详细绑定错误
    }
    // 原有逻辑
}

内容的提问来源于stack exchange,提问作者AHartwig99

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.09 23:31:12