Ajax传递POHeaderViewModel至后端[FromBody]参数为何为Null?
请求头Content-Type未正确设置
[FromBody]特性要求请求体为JSON格式,而jQuery Ajax默认的Content-Type是application/x-www-form-urlencoded。如果不明确指定application/json,后端无法正确解析请求体中的JSON数据,导致参数绑定失败为null。
解决:在Ajax配置中添加contentType: "application/json; charset=utf-8"。前端对象未序列化为JSON字符串
直接将JavaScript对象传入Ajax的data参数时,jQuery会自动将其转换为表单编码格式,而非JSON字符串。后端接收不到符合要求的JSON,无法完成模型绑定。
解决:使用JSON.stringify(objPOHeaderViewModel)将对象转换为JSON字符串后再传入data。前后端模型属性名不匹配
默认的JSON序列化器(如System.Text.Json)区分大小写,若前端属性名(如orderLines)与后端模型属性名(如OrderLines)不一致,会导致属性绑定失败,极端情况下整个模型会被绑定为null。
解决:确保前后端属性名完全一致;或在后端模型属性上添加[JsonPropertyName("前端属性名")](System.Text.Json)或[JsonProperty("前端属性名")](Newtonsoft.Json)进行名称映射。嵌套复杂类型/集合结构不匹配
若POHeaderViewModel包含集合(如订单行列表)或嵌套对象,前端构建的结构不符合后端模型的期望(比如集合不是标准对象数组、嵌套对象属性缺失),会导致整个模型绑定失败。
解决:调试前端对象结构,确保订单行等嵌套数据的属性、层级与后端模型完全对应。模型验证失败终止绑定
若后端模型包含[Required]等验证特性,而前端传入的对象缺少必填字段,模型绑定过程中验证失败,可能导致参数为null(部分场景下会返回带验证错误的对象,但也存在返回null的情况)。
解决:检查后端模型的验证规则,确保前端传入的对象包含所有必填项;或启用模型验证日志,查看具体错误信息。请求方法不符合要求
[FromBody]仅支持POST、PUT等包含请求体的HTTP方法,若使用GET请求,后端无法从请求体中读取数据,参数必然为null。
解决:将Ajax的method(或type)设置为"POST"或"PUT"。
内容的提问来源于stack exchange,提问作者Hibir

