Azure APIM调用Webservice返回400错误:输入无JSON令牌
排查Azure APIM转发DELETE请求体导致的400错误
核心排查方向
1. 检查APIM是否丢弃了DELETE请求体
- 部分网关默认会忽略DELETE方法的请求体,APIM可能因策略或默认配置未转发请求体至后端。
- 操作步骤:
- 登录Azure门户,进入目标APIM实例,找到对应API的DELETE操作,查看入站策略,确认没有
set-body策略清空请求体,也无rewrite-uri等策略意外移除请求体内容。 - 使用APIM测试控制台发起请求,启用**跟踪(Trace)**功能,查看请求在APIM处理前后的
Request Body内容,确认请求体是否被正确转发。
- 登录Azure门户,进入目标APIM实例,找到对应API的DELETE操作,查看入站策略,确认没有
2. 验证Content-Type请求头的一致性
- 后端JSON解析器依赖
Content-Type: application/json识别请求体格式,若APIM修改或丢失该头,会触发解析失败。 - 操作步骤:
- 在APIM跟踪记录中,检查入站请求的
Content-Type头是否为application/json,且未被APIM策略修改为text/plain等其他值。 - 对比测试环境与生产环境的APIM策略,确认生产环境无额外修改
Content-Type的逻辑。
- 在APIM跟踪记录中,检查入站请求的
3. 对比测试与生产环境的APIM后端配置
- 即使API定义一致,后端连接配置的细微差异也可能导致请求体传输异常。
- 操作步骤:
- 检查生产环境APIM的后端设置:是否启用HTTP/2协议?是否开启Gzip/Brotli压缩?这些配置可能影响请求体的完整性。
- 对比测试环境与生产环境的后端池配置,确认代理设置、超时时间等参数完全一致。
4. 检查APIM的API定义细节
- 若APIM的DELETE操作未正确定义请求体,可能导致APIM默认不转发请求体。
- 操作步骤:
- 在APIM的API定义中,查看DELETE操作的请求体配置,确认已添加
application/json类型的请求体定义,且按后端要求标记为必填。 - 导出测试环境与生产环境的API定义(OpenAPI/Swagger),用文本对比工具检查DELETE操作的配置差异。
- 在APIM的API定义中,查看DELETE操作的请求体配置,确认已添加
5. 查看后端服务器的请求日志
- 直接调用后端正常,但APIM转发的请求可能存在编码、额外请求头等细微差异,导致后端解析失败。
- 操作步骤:
- 开启后端服务器的详细请求日志,记录来自APIM的请求内容,包括请求体、请求头、HTTP版本等。
- 对比直接调用与APIM调用的请求日志,定位差异点(比如APIM是否发送了空请求体)。
内容的提问来源于stack exchange,提问作者ky_lej
相关产品推荐
相关产品推荐

