fetch提交JSON后后端UserModel绑定字段全为null,常规排查无效
模型绑定为null的问题修正
核心错误定位
- 前端请求头字段命名不符合HTTP规范:原代码中自定义了名为
Content的请求头,服务端无法通过这个字段识别请求体的格式,不会触发JSON解析流程。正确的标准头字段是Content-Type,作用是告知服务端当前请求携带的实体内容的编码与格式。 - 控制器参数缺少绑定规则指定:默认模型绑定流程仅会从路由值、查询字符串、表单字段中匹配参数值,不会主动读取请求体中的JSON内容完成反序列化,必须显式指定从请求体绑定的规则,框架才会正确解析入参。
代码修正方案
前端请求修正
替换错误的请求头字段为标准Content-Type:
fetch("/Admin/SaveUser", { method: "Post", headers: { "Content-Type": "application/json", 'Accept': 'application/json;charset=utf-8' }, body: JSON.stringify(userData) }).then(response => { response.json().then(result => { UpdateDisplay(); }); });
控制器逻辑修正
根据使用的框架版本添加对应的请求体绑定特性:
- 针对ASP.NET Core、ASP.NET Web API项目,给入参增加
[FromBody]特性:
[HttpPost] public JsonResult SaveUser([FromBody] UserModel user) { UserModel.UpdateUser(user); return Json(false); }
- 针对基于.NET Framework的传统ASP.NET MVC项目(继承自
System.Web.Mvc.Controller的控制器),框架默认没有内置JSON请求体解析能力,需要额外引入JSON值提供器扩展,或手动读取请求流完成JSON反序列化,仅靠特性标注无法触发绑定逻辑。
排查补充
你之前验证的模型定义、getter/setter配置、JSON字段名匹配、stringify序列化操作都是正确的,问题根源完全来自上述的头字段错误与绑定规则缺失。
内容的提问来源于stack exchange,提问作者Jack Thor
相关产品推荐
相关产品推荐

