如何将请求中的值复制到 Azure API 管理策略中的响应中

Posted

技术标签:

【中文标题】如何将请求中的值复制到 Azure API 管理策略中的响应中【英文标题】:How to copy value from request into response in Azure API management policy 【发布时间】:2020-06-17 10:20:23 【问题描述】:

在 APIM 策略中,我希望将入站策略中的请求正文中的值复制到出站策略中的响应正文中。

APIM 策略中有全局变量的概念吗?

【问题讨论】:

【参考方案1】:

您可以通过使用变量来实现这一点。

政策:

        <policies>
        <inbound>
            <base />
            <set-variable name="requestBody" value="@(context.Request.Body.As<JObject>(true))" />
        </inbound>
        <backend>
            <!-- Unused for this sample 
            <base />
            -->
        </backend>
        <outbound>
            <base />
            <set-body template="none">@
                // var responseBodyFromBackend = ((IResponse)context.Response).Body.As<string>(true); 
                var requestBody = context.Variables.GetValueOrDefault<JObject>("requestBody");     
                var response = new JObject();
                response["OriginalRequestBody"] = requestBody;
                return response.ToString();        
            </set-body>
        </outbound>
        <on-error>
            <base />
        </on-error>
    </policies>

请求正文:


   "hello": "world"

响应正文:


    "OriginalRequestBody": 
        "hello": "world"
    

【讨论】:

以上是关于如何将请求中的值复制到 Azure API 管理策略中的响应中的主要内容,如果未能解决你的问题,请参考以下文章

在 Azure API 管理器中验证 POST 请求正文

如何在 Azure API 管理中的每个请求后关闭 SSL 连接

当后端请求成功时,如何调试从 Azure API 管理到 Front Door 的 502 Bad Gateway 错误响应?

将 JSON 对象映射到 Azure 函数 API 请求类参数中的类

Azure API 管理 - 用户元数据

有没有办法通过 Azure API 管理中的订阅来改变速率限制的值