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

使用HttpClient调用API报错:Cannot send a content-body with this verb-type

问题分析与解决

错误原因

  1. "Cannot send a content-body with this verb-type":HttpClient严格遵循HTTP规范,GET请求的语义本身不允许携带请求体,你给GET请求设置request.Content的操作违反了这一规范,因此抛出该错误。Postman没有严格限制这类不符合规范的请求,所以能正常运行。
  2. 415 Unsupported Media Type:注释掉content.Headers.ContentType后,请求头中缺少了API要求的Content-Type: application/json,导致API无法识别请求格式,返回415错误。

修正方案

移除所有与请求体相关的代码,直接将Content-Type添加到请求头中(使用TryAddWithoutValidation绕过HttpClient的规范校验,因为你的API特殊要求GET请求携带这个头)。

修正后的代码:

try
{
    // 建议复用HttpClient实例,避免频繁创建销毁导致Socket资源耗尽
    var client = new HttpClient();
    var request = new HttpRequestMessage(HttpMethod.Get, "https://connect1.uat.westpac.co.nz/fxrates/v1/forexratesheet/v2");
    
    request.Headers.Add("X-IBM-Client-Id", "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxx");
    request.Headers.Add("X-IBM-Client-Secret", "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx");
    request.Headers.Add("accept", "application/json");
    
    // 直接添加Content-Type请求头,绕过HttpClient的规范校验
    request.Headers.TryAddWithoutValidation("Content-Type", "application/json");
    
    var response = await client.SendAsync(request);
    response.EnsureSuccessStatusCode();

    this.txtResult.Text = await response.Content.ReadAsStringAsync();
}
catch (Exception ex)
{
    this.txtResult.Text = ex.Message;
}

额外注意

  • 长期来看,建议复用HttpClient实例,不要每次请求都新建,否则会造成Socket资源浪费。
  • 该API的设计不符合标准HTTP语义(GET请求不应要求Content-Type或请求体),如果有条件可以咨询API提供者,确认是否有更规范的调用方式。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.16 05:22:43