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

在Azure APIM单次调用中执行多个Send-Request请求

在Azure APIM中实现初始请求后批量发起后续请求并组装结果

核心限制说明

Outbound阶段无法使用<SEND-REQUEST>策略标签,但可以通过APIM的context.SendAsync()方法在C#代码中发起HTTP请求,该方法支持所有策略阶段调用。

解决方案步骤

1. 发起初始请求并存储结果

在Inbound阶段发起初始请求,将响应结果存入APIM变量,方便后续阶段调用:

<INBOUND>
   <SEND-REQUEST mode="new" response-variable-name="initialResponse" timeout="20" ignore-error="false">
       <set-url>https://你的源API地址/初始接口路径</set-url>
       <set-method>GET</set-method>
       <!-- 按需添加请求头、参数等配置 -->
   </SEND-REQUEST>
</INBOUND>

2. 在Outbound阶段遍历发起后续请求并组装结果

在Outbound的SET-BODY代码块中,读取初始请求结果,遍历需要补充数据的条目,通过context.SendAsync()发起后续请求,将结果注入初始响应后返回:

<OUTBOUND>
   <RETURN-RESPONSE>
      <SET-BODY>@{          
          // 读取初始请求的响应结果
          var initialResponse = context.Variables.GetValueOrDefault<JObject>("initialResponse").Content.As<JObject>();
          var items = initialResponse["items"].AsJEnumerable().ToList();
          
          // 并行发起后续请求(提升响应效率)
          var tasks = items.Select(async item => {
              var itemId = item["id"].ToString();
              // 构造后续请求
              var request = new HttpRequestMessage(HttpMethod.Get, $"https://你的源API地址/详情接口/{itemId}");
              // 发起请求并获取响应
              var response = await context.SendAsync(request, CancellationToken.None);
              
              if(response.IsSuccessStatusCode)
              {
                  var details = JObject.Parse(await response.Content.ReadAsStringAsync());
                  // 将详情注入初始条目
                  item["details"] = details;
              }
              else
              {
                  // 处理请求失败的场景
                  item["details"] = new JObject { ["error"] = "获取详情失败" };
              }
          });
          
          // 等待所有请求完成
          Task.WhenAll(tasks).Wait();
          
          // 返回组装后的最终结果
          return initialResponse.ToString();
      }</SET-BODY>
      <set-status code="200" reason="OK" />
   </RETURN-RESPONSE>
</OUTBOUND>

关键注意事项

  • 并发控制:并行请求可能触发源API的限流机制,若源API有并发限制,可通过SemaphoreSlim限制并行任务数量,避免被限流。
  • 超时处理:可在构造请求时设置超时时间,或调整APIM全局后端超时配置,防止整体响应超时。
  • 异常捕获:建议添加try-catch块捕获请求过程中的异常,避免单个请求失败导致整个响应中断。
  • 网络访问:确保APIM实例能访问后续请求的目标API(若APIM部署在VNet中,需配置对应网络规则)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.14 18:29:49