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

如何通过Postman原始文本/VS HTTP请求上传Meta WhatsApp API本地文件

解决WhatsApp API上传本地文件时「messaging_product is required」错误

问题根源分析

  1. JSON方式上传本地文件不可行:你尝试用JSON传递本地文件路径"C:/dune2.jpg;type=image/jpeg",但WhatsApp API无法直接读取你本地的文件路径,必须通过multipart/form-data格式上传文件的二进制内容。这种情况下API解析请求失败,会误报「messaging_product必填」的错误。
  2. C#代码的关键错误:你手动设置了request.Content.Headers.ContentType = new MediaTypeHeaderValue("multipart/form-data");,这会覆盖MultipartFormDataContent自动生成的包含**边界标识(boundary)**的Content-Type头。服务器没有边界就无法正确解析表单字段,导致messaging_product参数被判定为缺失。

另外,你提供的curl命令里-H 'Content-type: application/json'是无效的——当使用-F参数时,curl会自动设置Content-Type为multipart/form-data并添加正确的边界,手动设置的JSON头会被忽略。

修正后的C#代码

HttpClient client = new HttpClient();
HttpRequestMessage request = new HttpRequestMessage(HttpMethod.Post, "https://graph.facebook.com/v15.0/*****/media");
request.Headers.Add("Authorization", "Bearer ******");

MultipartFormDataContent content = new MultipartFormDataContent();
// 上传文件二进制内容,确保文件路径正确
byte[] fileBytes = File.ReadAllBytes(@"C:/dune2.jpg");
content.Add(new ByteArrayContent(fileBytes), "file", Path.GetFileName(@"C:/dune2.jpg"));
// 添加API要求的字段
content.Add(new StringContent("image/jpeg"), "type");
content.Add(new StringContent("whatsapp"), "messaging_product");

// 不要手动设置Content-Type!MultipartFormDataContent会自动生成带boundary的正确头
request.Content = content;

HttpResponseMessage response = await client.SendAsync(request);
response.EnsureSuccessStatusCode();
string responseBody = await response.Content.ReadAsStringAsync();
MessageBox.Show(responseBody);

额外注意事项

  • 确保文件路径使用正确的转义(比如用@符号避免转义问题)。
  • 验证你的Bearer令牌权限正确,且API版本(v15.0)与令牌兼容。
  • Postman中使用form-data上传时,需在「Body」选项卡选择form-data,然后添加三个字段:
    • file:类型选「File」,然后选择本地文件
    • type:类型选「Text」,值填image/jpeg
    • messaging_product:类型选「Text」,值填whatsapp

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.01 19:23:19