.NET Core 2.2模型绑定属性全为null问题排查求助
模型绑定全为null的原因及解决方案
嘿,我来帮你排查下这个.NET Core 2.2里模型绑定全为null的问题,主要有几个关键点需要调整:
1. 核心问题:缺少[FromBody]特性
在.NET Core MVC中,默认的模型绑定逻辑会优先从查询字符串、表单数据等位置提取参数值,而不会自动读取请求体里的JSON内容。如果你是通过POST请求发送JSON数据,必须在Action的参数上标记[FromBody]特性,否则绑定器找不到对应的数据,自然所有属性都会是null。
修改后的Action签名应该是这样:
public async Task<JsonResult> AddText([FromBody] AdminText newText)
2. 数组类型字段格式不匹配
你的AdminText模型继承自UserText,其中CategoriesIds是List<int>类型,LocationStrList是List<string>类型,但你提交的JSON里这两个字段是单个字符串值:
"LocationStrList": "7_110", "CategoriesIds": "33"
模型绑定器没办法自动把字符串转换成列表类型,这会导致绑定失败(甚至可能影响整个模型的绑定)。你需要调整JSON格式:
- 如果
CategoriesIds是单个整数的列表,改成数组格式:"CategoriesIds": [33] - 如果
LocationStrList需要拆分"7_110"为两个元素,要么前端直接传数组:"LocationStrList": ["7", "110"],要么后台在绑定完成后手动拆分字符串(或者自定义模型绑定器来处理这种格式)
3. 值类型的JSON格式不规范
你提交的JSON里,布尔、数字类型的字段都用了字符串包裹(比如"EnableComments": "false"、"Type": "2"),虽然部分情况下JSON序列化器能兼容,但更规范的做法是使用JSON原生类型:
- 布尔值去掉引号:
"EnableComments": false - 数字去掉引号:
"Type": 2、"LanguageType": 1、"Status": 1、"HomepageOrder": 2
如果前端确实只能传字符串格式的这些值,你可以在Startup.cs里配置JSON序列化器来支持字符串到值类型的转换:
services.AddMvc() .AddJsonOptions(options => { // 添加布尔值转换器,支持字符串转bool options.SerializerSettings.Converters.Add(new Newtonsoft.Json.Converters.BooleanConverter()); // 添加数字转换器,支持字符串转数字 options.SerializerSettings.Converters.Add(new Newtonsoft.Json.Converters.IntegerConverter()); options.SerializerSettings.NullValueHandling = Newtonsoft.Json.NullValueHandling.Ignore; });
总结调整步骤
- 给Action参数加上
[FromBody]特性 - 修正JSON中数组字段的格式为JSON数组
- 将JSON里的布尔、数字值改成原生类型(或配置序列化器兼容字符串格式)
内容的提问来源于stack exchange,提问作者Offir
相关产品推荐
相关产品推荐

