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

ASP.NET Core 8 Web API接收复杂JSON时子对象始终为空的问题

问题解决

1. Address属性始终为空的原因及修复

你的JSON请求格式错误,嵌套对象需要用JSON对象嵌套的方式,而非点(.)分隔属性名。当前"address.id"这类写法无法被ASP.NET Core的JSON序列化器正确解析为Address对象。

正确的JSON格式应为:

{
    "id": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
    "name": "Peter Lee",
    "age": "10", // 注意:Person的Age是string类型,建议传字符串格式,避免类型转换潜在问题
    "address": {
        "id": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
        "street": "Mano Hoo Street",
        "number": 123 // 可选,未传时会使用默认值0
    }
}

额外提示:你的Person.Age定义为string类型,但当前请求传的是数字10,虽然ASP.NET Core默认会自动转换数字到字符串,但为严格匹配模型,建议传字符串格式的"10"。

2. POST数据为空时断点不触发的原因

这是ASP.NET Core的默认行为:使用[FromBody]绑定请求体时,若请求体为空或JSON格式无效,模型绑定会直接返回400 Bad Request响应,不会进入控制器方法,因此断点不会触发。

若需要在这类场景下进入方法处理,可通过以下方式调整:

  • 移除控制器上的[ApiController]特性(若存在),但会失去自动模型验证等特性;
  • 将参数改为Person? person,允许空绑定,但空请求体时person会为null,框架仍可能提前拦截;
  • 配置JSON序列化选项允许空请求体,但不推荐,会绕过默认格式校验。

通常建议保留默认行为,空请求体本身不符合接口规范,直接返回400是合理的。若需调试此类场景,可在请求管道中添加中间件捕获请求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.26 18:05:58