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

Web API POST请求中数值属性为何仅接收到默认值而非传入值?

嘿,我碰到过好几个和你一模一样的问题,大概率是下面这几个原因之一,咱们一步步排查:

常见排查方向与解决办法
  • 属性名大小写不匹配
    虽说ASP.NET Core默认的JSON序列化器(System.Text.Json)是大小写不敏感的,但如果你手动改过配置(比如把PropertyNameCaseInsensitive设成了false),那前端传的pageSize和后端模型里的PageSize就会匹配失败。你可以去Startup/Program.cs里看看有没有类似这样的代码:

    builder.Services.AddControllers()
        .AddJsonOptions(options =>
        {
            options.JsonSerializerOptions.PropertyNameCaseInsensitive = false;
        });
    

    要是有的话,要么把这个值改回true,要么让前端统一用和后端一致的大小写传参。

  • 前端传的是字符串而非数值类型
    有时候前端会不小心把数值当成字符串传(比如写成"pageSize": "20"而不是"pageSize": 20),如果后端模型里的PageSize是int类型,模型绑定就会失败,只能拿到默认值(null或者0)。你可以去Chrome的Network面板里看请求体的Raw内容,确认pageSize是纯数值而不是带引号的字符串。要是前端传的是字符串,要么让他们改成数值类型,要么后端把属性改成string再转成int,前者肯定更规范。

  • 检查模型属性的可访问性
    确保你的criteria模型里的数值属性都是public的,要是设成了private或者protected,模型绑定根本拿不到值。比如正确的写法应该是:

    public class Criteria
    {
        public string Sort { get; set; }
        public int? Offset { get; set; }
        public int PageSize { get; set; }
    }
    
  • 排查自定义绑定逻辑的干扰
    如果你的项目里加了自定义的模型绑定器、Action过滤器或者中间件,说不定这些代码干扰了数值属性的绑定。可以先暂时注释掉这些自定义代码,测试下数值属性能不能正常接收,要是可以的话再逐步排查是哪段代码出了问题。

  • 查看模型绑定的详细日志
    你可以开启ASP.NET Core的模型绑定日志,看看具体的绑定失败原因。在appsettings.json里加这段配置:

    {
        "Logging": {
            "LogLevel": {
                "Microsoft.AspNetCore.Mvc.ModelBinding": "Debug"
            }
        }
    }
    

    然后运行项目,看控制台或者日志文件里的Debug信息,里面会详细告诉你哪个属性绑定失败、原因是什么。

对了,你说URL参数DealKey正常工作,这是因为URL参数的绑定逻辑和请求体的JSON绑定逻辑不太一样,所以问题大概率出在请求体的JSON绑定环节,和URL参数的绑定没关系。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.19 10:14:35