C#控制器接收AJAX POST提交的[FromBody]参数为null问题求解
问题排查与解决步骤
- 检查
Amount字段类型匹配问题
后端模型中Amount是decimal类型,如果前端传入的totalPrice是字符串格式(比如带货币符号、千分位分隔符,或是未转成数字类型的字符串),会导致反序列化失败,最终整个模型绑定为null。修改前端代码,显式转为数字类型:CompleteOrderInfo.Amount = Number(totalPrice); - 配置JSON序列化大小写不敏感
.NET Core 3.0+默认使用System.Text.Json作为序列化器,部分版本默认开启严格大小写匹配,如果前端属性名大小写和后端模型不一致会绑定失败。在Program.cs(.NET 6+)或Startup.cs中添加如下配置:builder.Services.AddControllers() .AddJsonOptions(options => { options.JsonSerializerOptions.PropertyNameCaseInsensitive = true; }); - 查看模型绑定错误详情
在控制器方法中添加ModelState校验代码,打断点即可查看具体的绑定失败原因:[HttpPost, ActionName("PayNow")] public async Task<IActionResult> PayNow([FromBody] CompleteOrderInfo request) { if (!ModelState.IsValid) { // 此处打断点查看errors中的错误信息即可定位问题 var errors = ModelState.Values .SelectMany(v => v.Errors) .Select(e => e.ErrorMessage) .ToList(); } return View(); } - 确认控制器添加
[ApiController]特性
如果你的控制器继承自ControllerBase,需要在类上添加[ApiController]特性,才能启用[FromBody]参数的默认绑定规则。如果是传统MVC控制器(返回视图),也可以添加该特性不影响视图返回。
内容的提问来源于stack exchange,提问作者audrey atwork
相关产品推荐
相关产品推荐

