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

C# ASP.NET Core 2.2 API接收Angular POST参数为null如何解决

问题原因

最主要的问题出在你后端定义的ShippingRateModel模型上:C#类的成员如果没有显式声明访问修饰符,默认是**私有(private)**的,ASP.NET Core的模型绑定系统在反序列化请求体的JSON内容时,只能读写公共(public)属性完成赋值,私有属性无法被访问到,所以即使结构完全匹配,反序列化出来的对象所有属性都是默认值,甚至整个对象为null。
其次你没有给接口参数显式加[FromBody]特性,即使你说之前加过没效果,那是因为第一个问题没解决,两个问题叠加才导致参数始终为null。

解决步骤

1. 修改后端模型属性为公共属性

将后端ShippingRateModel的所有属性前加上public修饰符:

namespace Server.Models
{
    public class ShippingRateModel
    {
        public float WeightKg { get; set; }
        public string OriginPostalCode { get; set; }
        public string DestPostalCode { get; set; }
    }
}

2. 给接口参数加上[FromBody]特性

显式声明框架从POST请求的Body中读取JSON内容反序列化为参数对象:

[HttpPost]
public void GetCanadaPostRates([FromBody] ShippingRateModel info)
{
    // 接口命中后info就能正常获取到前端传的参数
    // 业务逻辑
}

额外排查点

如果完成上述修改后还是有问题,可以检查以下配置:

  • 确认请求头的Content-Type值为application/json,Angular的HttpClient默认传递对象时会自动携带该请求头,如果你自定义过请求配置需要确认没有覆盖该配置
  • 如果你项目中配置了JSON序列化强制使用驼峰命名规则,要么调整前端传递的参数key为驼峰格式(如weightKg而不是WeightKg),要么给后端属性加上序列化别名特性:使用Newtonsoft.Json的话加[JsonProperty("weightKg")],使用System.Text.Json的话加[JsonPropertyName("weightKg")]
  • 确认前端传递的参数值类型和后端匹配,比如WeightKg不要传递字符串类型的数值,避免类型不匹配导致反序列化失败

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.16 02:24:00