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

使用C#上传Walmart库存Feed报错“无法找到有效库存”求助

排查Walmart库存Feed上传报错“Can not find any valid inventory in Feed”问题

我用C#向Walmart Marketplace上传库存Feed时,接口返回了Feed ID,但后续Feed状态报错“Can not find any valid inventory in Feed”。用Postman上传完全相同的JSON内容能成功,但把Postman生成的C#代码复制到程序里执行,还是出现同样的错误,Walmart技术支持没给出有效解决方案,附上相关代码和数据,求排查原因:

相关代码与数据

Postman生成的C#代码

RestClient client = new RestClient("https://marketplace.walmartapis.com/v3/feeds?feedType=inventory&shipNode=<myshipnode>");
RestRequest request = new RestRequest(Method.POST);
client.Timeout = -1;

request.AddHeader("Content-Type", "multipart/form-data");
request.AddHeader("Cache-Control", "no-cache");
request.AddHeader("Accept", "application/json");
request.AddHeader("Accept-Encoding", "*");
request.AddHeader("Connection", "keep-alive");
request.AddHeader("WM_SEC.ACCESS_TOKEN", this.Credentials.Token);
request.AddHeader("WM_CONSUMER.CHANNEL.TYPE", System.Guid.NewGuid().ToString());
request.AddHeader("WM_QOS.CORRELATION_ID", this.Credentials.ConsumerId) ;
request.AddHeader("WM_SVC.NAME", "Walmart Marketplace");
request.AddHeader("Authorization", "Basic " + this.Credentials.Authorization);
request.AddFile("file", "c:\\temp\\file.json", "multipart/form-data");
IRestResponse response = client.Execute(request);
Console.WriteLine(response.Content);

上传的JSON数据

{
    "InventoryHeader": {
        "version": "1.4"
    },
    "Inventory": [
        {
            "sku": "X27A001-A",
            "quantity": {
                "unit": "EACH",
                "amount": 89
            }
        }
    ]
}

Walmart官方示例JSON

{
  "InventoryHeader": {
    "version": "1.4"
  },
  "Inventory": [
    {
      "sku": "test1",
      "quantity": {
        "unit": "EACH",
        "amount": 10
      }
    },
    {
      "sku": "894728",
      "quantity": {
        "unit": "EACH",
        "amount": 20
      }
    }
  ]
}

可能的问题原因与修复方案

1. 错误设置了请求的Content-Type头

Postman生成的代码里手动添加了Content-Type: multipart/form-data,但RestSharp在使用AddFile时会自动生成包含正确boundary的Content-Type头,手动设置会覆盖这个值,导致Walmart服务器无法正确解析multipart请求中的文件内容。

修复: 移除手动添加的Content-Type头,让RestSharp自动处理。

2. 文件MIME类型指定错误

AddFile方法的第三个参数是上传文件的MIME类型,代码里填了multipart/form-data,这是整个请求的类型,而上传的是JSON文件,应该指定为application/json。

修复: 修改AddFile的MIME参数:

request.AddFile("file", "c:\\temp\\file.json", "application/json");

3. 文件编码问题

如果JSON文件的编码不是UTF-8(比如带BOM的UTF-8或者GBK),Walmart服务器解析时可能无法识别其中的库存数据。Postman会自动处理编码,但C#直接读取文件可能保留了错误编码。

修复: 读取文件时指定UTF-8编码,再添加到请求中:

string jsonContent = File.ReadAllText(@"c:\temp\file.json", Encoding.UTF8);
request.AddFile("file", Encoding.UTF8.GetBytes(jsonContent), "file.json", "application/json");

4. ShipNode参数未正确替换

确认URL中的<myshipnode>已经替换为你在Walmart后台配置的有效ShipNode值,Postman中可能已经替换,但代码里可能遗漏了。

额外排查建议

  • 抓包对比Postman和C#请求的差异:用Fiddler或Charles捕获两个请求的完整报文,对比请求头、multipart结构、文件内容的编码细节,找出不一致的地方。
  • 验证JSON格式:用JSON校验工具确认上传的JSON没有语法错误,虽然看起来和示例一致,但可能存在隐藏的格式问题(比如不可见字符)。
  • 确认SKU有效性:确保上传的SKU已经在Walmart Marketplace后台创建,不存在的SKU也会导致该错误(但Postman能成功的话大概率不是这个问题)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.13 02:40:32