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

ASP.NET Core中[FromBody]绑定对象始终为NULL的问题咨询

ASP.NET Core中[FromBody]绑定对象为NULL的原因及解决方法

差异原因

你手动读取请求体并用JsonConvert.DeserializeObject(Newtonsoft.Json)能正常反序列化,但使用[FromBody]时对象为NULL,核心原因是ASP.NET Core默认使用System.Text.Json进行模型绑定,而你手动用的是Newtonsoft.Json,两者的序列化/反序列化规则不一致。具体可能的差异点包括:

  • 大小写匹配:System.Text.Json默认区分大小写,Newtonsoft.Json默认不区分。如果前端传的JSON属性是小驼峰(如assignmentId),模型是大驼峰(AssignmentId),前者不会自动映射,后者会。
  • 枚举处理:自定义枚举AssignmentTypes的序列化规则在两个库中不同,若前端传字符串枚举值,System.Text.Json需显式配置才能正确解析。
  • 绑定验证:若模型中[Required]标记的字段(如CrewMemberId、ProjectId)在请求中缺失或格式错误,System.Text.Json会直接返回NULL,而Newtonsoft.Json可能会忽略验证先创建对象。

解决方法

方法1:切换框架使用Newtonsoft.Json

让框架和你手动反序列化使用的库一致,消除规则差异:

  1. 安装NuGet包:
Install-Package Microsoft.AspNetCore.Mvc.NewtonsoftJson
  1. 在Program.cs中配置:
builder.Services.AddControllers()
    .AddNewtonsoftJson(options =>
    {
        // 忽略循环引用(避免导航属性导致的序列化问题)
        options.SerializerSettings.ReferenceLoopHandling = Newtonsoft.Json.ReferenceLoopHandling.Ignore;
        // 支持枚举字符串反序列化
        options.SerializerSettings.Converters.Add(new Newtonsoft.Json.Converters.StringEnumConverter());
    });

方法2:调整System.Text.Json配置

如果不想切换库,修改默认配置适配前端请求:

builder.Services.AddControllers()
    .AddJsonOptions(options =>
    {
        // 开启大小写不敏感匹配
        options.JsonSerializerOptions.PropertyNameCaseInsensitive = true;
        // 支持枚举字符串反序列化
        options.JsonSerializerOptions.Converters.Add(new System.Text.Json.Serialization.JsonStringEnumConverter());
        // 忽略循环引用
        options.JsonSerializerOptions.ReferenceHandler = System.Text.Json.Serialization.ReferenceHandler.IgnoreCycles;
    });

方法3:排查请求与模型的匹配问题

  • 确认前端JSON的所有属性名与模型一致(或通过上述配置开启大小写不敏感)。
  • 检查[Required]标记的字段(CrewMemberId、ProjectId)是否在请求中存在且格式正确,缺失必填字段会导致模型绑定失败。

额外排查技巧

  • 查看开发环境下的ASP.NET Core日志,框架会输出模型绑定失败的具体原因(如哪个字段验证不通过)。
  • 用Postman直接发送符合格式的请求,排除前端代码的潜在问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.19 06:25:20