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
相关产品推荐
相关产品推荐

