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

升级至.NET 5.0后Asp.net Core Web API的POST请求失效问题

解决.NET 2.2升级到5.0后POST请求模型绑定为null的问题

升级后出现[FromBody]模型为null、空引用异常的核心原因,大多是**.NET Core 3.0+默认替换了JSON序列化器**,以及模型绑定规则的细微调整。以下是针对性的排查和解决步骤:


1. 恢复Newtonsoft.Json序列化(最直接的临时解决方案)

.NET 2.2默认使用Newtonsoft.Json,而.NET 5默认改用System.Text.Json,两者在序列化规则、容错性上有差异。如果前端未做改动,最快的解决方式是换回Newtonsoft:

  • 安装NuGet包:Microsoft.AspNetCore.Mvc.NewtonsoftJson
  • 在Startup.cs的ConfigureServices中修改配置:
    public void ConfigureServices(IServiceCollection services)
    {
        // 替换默认的System.Text.Json为Newtonsoft.Json
        services.AddControllers().AddNewtonsoftJson();
    }
    

2. 检查模型的可访问性与构造函数

System.Text.Json对模型的要求更严格:

  • 确保JobsReportSearchViewModel是public类,所有需要绑定的属性都是public且带有get/set访问器
  • 如果模型只有带参数的构造函数,必须添加[JsonConstructor]特性,或者新增一个public无参构造函数:
    public class JobsReportSearchViewModel
    {
        // 新增无参构造函数
        public JobsReportSearchViewModel() { }
    
        public DateTime? enteredDateFrom { get; set; }
        // 其他属性...
    }
    

3. 验证请求头与JSON格式

  • 抓包确认Content-Type:前端请求必须携带Content-Type: application/json头,否则[FromBody]无法解析请求体。用Chrome开发者工具或Fiddler检查请求头是否符合要求
  • 校验JSON格式:System.Text.Json对无效JSON的容错性远低于Newtonsoft,比如末尾逗号、未闭合的引号等,都会导致绑定失败。复制请求体到JSON校验工具检查格式正确性

4. 调整命名策略匹配前端参数

如果前端发送的参数命名(比如PascalCase)与System.Text.Json默认的驼峰策略不匹配:

  • 方式一:给模型属性添加[JsonPropertyName]特性指定对应字段名:
    public class JobsReportSearchViewModel
    {
        [JsonPropertyName("EnteredDateFrom")] // 匹配前端发送的字段名
        public DateTime? enteredDateFrom { get; set; }
    }
    
  • 方式二:全局修改System.Text.Json的命名策略为PascalCase:
    services.AddControllers().AddJsonOptions(options =>
    {
        // 禁用驼峰命名,使用属性的原命名(PascalCase)
        options.JsonSerializerOptions.PropertyNamingPolicy = null;
    });
    

5. 排查路由与请求方式匹配

确认前端请求的URL完全匹配[Route("GetJobsReport")],且请求方式为POST,避免误发GET请求导致无请求体可解析


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.25 12:28:17