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

Azure APIM 如何携带相同请求体将请求转发至两个不同后端

Azure APIM 同请求转发双后端配置方案

问题根因

原配置无法正常运行的核心原因有3个:

  • 类型不匹配:存储请求体时将内容解析为JObject类型存入变量,读取时却指定按string类型取值,策略引擎校验不通过
  • 标签语法错误:set-body节点多写了一层闭合标签,不符合XML语法规范
  • 读取逻辑冗余:不需要先把请求体存成JObject再转字符串,直接读取原始字符串内容兼容性更好,还能避免JSON序列化转义问题

修正后可用策略配置

直接替换原有策略即可,配置逻辑为:先缓存原始JSON请求体,主请求正常转发到主后端,同时并行发POST请求到副后端,全程保留原始请求体内容不丢失:

<policies>
    <inbound>
        <base />
        <!-- 缓存原始请求体,preserveContent设为true保证主后端能正常拿到请求内容 -->
        <set-variable name="bodyREQ" value="@(context.Request.Body.As<string>(preserveContent: true))" />
        <set-query-parameter name="code" exists-action="override">
            <value>{{FAcode}}</value>
        </set-query-parameter>
        <rewrite-uri template="/main" />
        <set-backend-service base-url="https://mymainbackend.azurewebsites.net" />
        <!-- 并行转发到副后端,可通过response-variable-name存储副后端响应供后续聚合使用 -->
        <send-request mode="new" response-variable-name="secondaryBackendResp">
            <set-url>https://mysecondaryurl.azurewebsites.net</set-url>
            <set-method>POST</set-method>
            <set-header name="content-type" exists-action="override">
                <value>application/json</value>
            </set-header>
            <!-- 直接传入缓存的原始请求体字符串 -->
            <set-body>@(context.Variables.GetValueOrDefault<string>("bodyREQ"))</set-body>
        </send-request>
    </inbound>
    <backend>
        <base />
    </backend>
    <outbound>
        <base />
        <!-- 如需聚合两个后端的响应,可在此处通过context.Variables["secondaryBackendResp"]拿到副后端返回内容做合并处理 -->
    </outbound>
    <on-error>
        <base />
    </on-error>
</policies>

额外配置说明

  • 若副后端需要和主后端携带完全一致的请求头、查询参数,可在send-request节点内补充对应配置项,不需要额外重新解析请求
  • 该配置默认会在inbound阶段并行发起副后端请求,不会阻塞主后端的请求转发流程,若不需要等待副后端返回结果再给客户端响应,无需额外调整
  • 若请求体不是JSON格式(比如form表单、二进制流),只需要把content-type头改成对应值即可,请求体缓存逻辑不需要调整

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 13:54:23