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

.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;
    });

总结调整步骤

  1. 给Action参数加上[FromBody]特性
  2. 修正JSON中数组字段的格式为JSON数组
  3. 将JSON里的布尔、数字值改成原生类型(或配置序列化器兼容字符串格式)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.08 16:27:44