.NET Core 3.1 API无[FromBody]时为何无法解析请求体对象?
.NET Core 3.1 API参数绑定的预期行为解析
这是完全符合预期的行为,原因和.NET Core的参数绑定规则直接相关:
默认绑定源规则:
- 简单类型(如
string、int等)默认优先从路由参数、查询字符串中绑定值,你的id参数属于这类,所以能自动从URL的路由段中解析到值,无需额外修饰。 - 自定义复杂类型(比如你定义的
ObjectClass)在.NET Core 3.1及后续版本中,默认绑定源是查询字符串,而不是请求体。这是框架为了避免参数绑定歧义做出的规则调整(和.NET Core 2.x的默认行为不同)。
- 简单类型(如
[FromBody]的作用:
当你需要让复杂类型从请求体(比如POST/PUT请求携带的JSON/XML数据)中解析时,必须显式添加[FromBody]特性,明确告知框架去请求体中读取并反序列化为对应的复杂类型实例。你之前的代码没有加这个特性,框架会尝试从查询字符串中找Object对应的字段,但你的请求查询字符串里没有相关内容,自然无法正常解析。
内容的提问来源于stack exchange,提问作者makse
相关产品推荐
相关产品推荐

