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

如何在Azure APIM的send-request策略中提取响应状态码

解决Azure APIM中send-request策略提取状态码的问题

嘿,我来帮你搞定这个APIM里send-request策略提取状态码的问题!你提到能拿到响应Body,但抓不到response.status.code,还混淆了context.Response.StatusCode——咱们先把这两个情况分清楚,一步步来解决:

情况1:获取send-request发起的外部请求的HTTP状态码

context.Response.StatusCode是当前API返回给客户端的状态码,和你用send-request调用的外部接口的状态码不是一回事。要拿到外部请求的HTTP状态码,你需要把send-request的完整响应存到变量里:

  1. 在send-request策略里通过response-variable-name属性指定变量名,保存完整响应对象:
<send-request mode="new" response-variable-name="externalApiResponse" timeout="30" ignore-error="false">
    <set-url>https://your-target-api.com/your-endpoint</set-url>
    <set-method>POST</set-method>
    <set-header name="Content-Type" exists-action="override">
        <value>application/json</value>
    </set-header>
    <set-body>@("{'requestKey':'requestValue'}")</set-body>
</send-request>
  1. 之后从这个变量里提取HTTP状态码:
<set-variable name="externalStatusCode" value="@(((IResponse)context.Variables["externalApiResponse"]).StatusCode)" />

现在externalStatusCode变量里就存着send-request返回的HTTP状态码(比如你看到的200)。

情况2:提取响应Body中的response.status.code字段

如果你的需求是从send-request返回的JSON Body(也就是你日志里显示的{"response": {"status": {"code": 200, "reason": "OK"}}})里提取code值,那需要先把Body反序列化,再逐层访问属性:

  1. 同样先保存send-request的响应到变量(和上面第一步一样),然后提取Body并反序列化为JObject:
<set-variable name="responseBodyJson" value="@(((IResponse)context.Variables["externalApiResponse"]).Body.As<JObject>())" />
  1. 接着提取目标字段:
<set-variable name="bodyStatuscode" value="@((int)context.Variables["responseBodyJson"]["response"]["status"]["code"])" />

这样bodyStatuscode就拿到了你要的200值。

小提示

  • 如果设置ignore-error="true",即使send-request返回4xx/5xx的错误状态码,策略也会继续执行,你依然能从变量里获取状态码和Body;如果设为false,APIM会直接返回错误,后续策略不会运行。
  • 记得要区分context.Response(当前API的响应)和send-request的响应变量,别再搞混啦!

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.22 07:52:15