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

.NET 7升级到8后ASP.NET Core无法读取PUT请求体问题

问题原因与解决方案

核心原因:.NET 8 模型绑定默认行为变更

.NET 8 调整了控制器方法的多参数模型绑定规则:当方法同时包含简单类型参数(如int id)和复杂类型参数(如TDetails viewModel)时,复杂类型不再默认从请求体绑定,必须显式指定绑定源。

解决方案

在控制器的TDetails viewModel参数上添加[FromBody]特性,明确指定从请求体获取数据:

[HttpPut("{id}")]
public async Task<IActionResult> Put(int id, [FromBody] TDetails viewModel)
{
    Debug.Assert(id == viewModel.Id);
    var record = await Table.SingleOrDefaultAsync(x => x.Id == viewModel.Id);
    return await ValidateAndUpdateModel(viewModel, record);
}

其他排查方向(若上述方案无效)

  • 确认Angular请求的Content-Type头为application/json:Angular的HttpClient.put默认会设置该头,可通过浏览器开发者工具的Network面板验证请求头。
  • 检查TDetails模型的属性是否为公共可写(即public { get; set; }):若属性是只读或私有setter,模型绑定无法完成赋值。
  • 排查模型构造函数绑定冲突:如果TDetails有带参数的构造函数,.NET 8会优先使用构造函数绑定,若构造函数参数与请求体字段名称不匹配,会导致属性未赋值。此时可添加[JsonConstructor]特性指定正确的构造函数,或改用属性绑定。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.04 09:32:15