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

C#使用HttpClient POST提交数据时内部List属性未被服务端接收问题

问题原因及修复方案

1. 嵌套必填字段为空导致服务端过滤条目

你代码中为Geography对象赋值的createdby是空实例,没有填充userid和writetime属性,同时Geography的writetime字段为默认的0001-01-01T00:00:00非法时间,服务端在校验字段合法性时会直接丢弃不符合要求的geographies条目。
修复代码:

item.geographies.Add(new Geography()
{
    city = location.SelectedCity,
    country = location.SelectedCountry,
    province = location.SelectedProvince,
    id = location.LocationGuid.ToString(),
    userid = _userid,
    source = _source ?? "Manual Entry", // 保证source有有效值
    writetime = _writetime, // 补全合法时间
    createdby = new CreatedByClass()
    {
        userid = _userId,
        writetime = _writetime
    } // 补全嵌套字段必填值
});

2. 时间格式不匹配服务端要求

服务端返回的时间均为带Z后缀的UTC标准ISO 8601格式,你本地序列化的时间没有时区标识,服务端无法识别会触发字段校验失败。同时你序列化后转JObject再转字符串的操作完全多余,可能会修改原有序列化配置,直接使用首次序列化结果即可。
修复代码:

// 配置序列化格式匹配服务端要求
string ItemJsonString = JsonConvert.SerializeObject(item, new JsonSerializerSettings
{
    DateTimeZoneHandling = DateTimeZoneHandling.Utc,
    DateFormatString = "yyyy-MM-ddTHH:mm:ss.fffZ",
    NullValueHandling = NullValueHandling.Include // 保证空字段也被正常序列化
});
// 删掉多余的JObject转换逻辑
var Content = new StringContent(ItemJsonString, Encoding.UTF8, "application/json");

3. 确认类属性匹配规则

检查Geography类的属性拼写、大小写、类型是否和服务端要求完全一致,不要加[JsonIgnore]之类的序列化忽略特性,如果使用System.Text.Json而不是Newtonsoft.Json序列化,需要确认是否配置了正确的属性命名规则。

4. 校验请求传输内容

如果上述修改后仍有问题,用抓包工具(Fiddler、Wireshark等)查看实际POST请求的Body,确认geographies字段是否正常携带,排除反向代理、WAF等中间层过滤数组字段的可能性。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.17 00:36:07