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

本地可正常访问的JSON接口在Azure环境调用返回406如何排查修复

HTTP 406 Not Acceptable 错误的核心是服务端无法生成符合请求Accept头指定格式的响应内容,本地和Azure环境的请求差异是故障根因,下面是具体排查解决步骤:

如何获取更多报错信息

  • 先捕获完整的响应上下文,不要直接调用EnsureSuccessStatusCode抛出异常,修改代码输出关键调试信息到Azure应用日志:
var client = new HttpClient();
client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));
var response = await client.GetAsync(endpointurl);
// 输出以下三个字段到Azure日志流/应用程序洞察排查
var statusCode = response.StatusCode;
var allResponseHeaders = response.Headers.Concat(response.Content.Headers).ToString();
var responseBody = await response.Content.ReadAsStringAsync();
// 同时打印本次请求实际发送的所有请求头,和本地运行结果对比
var requestHeaders = client.DefaultRequestHeaders.ToString();

response.EnsureSuccessStatusCode();
  • 到Azure对应服务的日志流页面查看上述输出的信息,也可以临时在Azure实例中通过curl命令直接调用接口复现问题:curl -v -H "Accept: application/json" 你的接口地址,查看完整的请求响应交互流程。

排查&修复方案

  • 请求头不一致问题:Azure环境下HttpClient可能会自动附加额外的代理头、X-Forwarded头,或是默认的User-Agent和本地环境不同,部分严格的接口会对非预期User-Agent的请求返回406。可以手动指定和本地浏览器一致的User-Agent:
client.DefaultRequestHeaders.UserAgent.ParseAdd("Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36");

也可以简化Accept头的添加逻辑,避免自动附加的q优先级参数被接口拦截:

// 替换原MediaTypeWithQualityHeaderValue写法
client.DefaultRequestHeaders.Add("Accept", "application/json");
  • IP/区域限制问题:部分服务会对白名单外的IP返回伪装的406错误,你可以在Azure服务的「属性」页面查询所有出站IP,确认这些IP是否在目标接口的访问白名单内。
  • 中间件篡改问题:如果你在Azure侧配置了WAF、API管理、正向代理等网络中间件,需要确认这些中间件是否修改了请求的Accept头,可临时关闭中间件验证问题是否消失。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 10:45:03