如何在响应中将两个变量合并为一个? [复制]

Posted

技术标签:

【中文标题】如何在响应中将两个变量合并为一个? [复制]【英文标题】:How to merge two variables into one in a response? [duplicate] 【发布时间】:2019-09-24 13:50:54 【问题描述】:

我在 Azure API 管理中添加了两个 API。它基本上是相同的 API,但适用于不同的环境。出于监视目的,我想创建一个操作,该操作将在两个 API 中调用相同的方法并将它们的结果合并为一个。我目前正在使用模拟数据处理模拟 API。

为了实现这一点,我创建了一个带有空白操作的空白 API。在此操作中,我声明了以下入站策略:

<inbound>
    <set-variable name="env1" value="" />
    <set-variable name="env2" value="" />
    <send-request mode="new" response-variable-name="env1" timeout="20" ignore-error="false">
        <set-url>https://env1-api.azure-api.net/api/data</set-url>
        <set-method>GET</set-method>
        <set-header name="Content-Type" exists-action="override">
            <value>application/json</value>
        </set-header>
    </send-request>
    <send-request mode="new" response-variable-name="env2" timeout="20" ignore-error="false">
        <set-url>https://env2-api.azure-api.net/api/data</set-url>
        <set-method>GET</set-method>
        <set-header name="Content-Type" exists-action="override">
            <value>application/json</value>
        </set-header>
    </send-request>
    <base />
</inbound>

在测试称为 throws 500 的操作时(我相信这是可以理解的,因为没有设置响应)。当我查看 Trace 选项卡时,我可以看到两条消息:

已发送对“https://env1-api.azure-api.net/api/data”的 GET 请求,结果存储在“env1”变量中。

对“https://env2-api.azure-api.net/api/data”的 GET 请求已发送,结果存储在“env2”变量中。

基于此,我得出的结论是调用工作正常。这就是我卡住的地方。我不知道如何在响应中合并这两个变量。

API 以 JSON 对象的形式返回一个对象数组。我想要实现的是将这两个响应合并为一个将由操作返回的响应。如何撰写回复?

请记住,我是 Azure 的菜鸟,所以我的方法可能过于原始。如果你有更好的东西,我很想听听。

【问题讨论】:

【参考方案1】:

查看退货政策:https://docs.microsoft.com/en-us/azure/api-management/api-management-advanced-policies#ReturnResponse

在set-body下,你可以合并这两个字符串。

【讨论】:

虽然此链接可能会回答问题,但最好在此处包含答案的基本部分并提供链接以供参考。如果链接页面发生更改,仅链接的答案可能会失效。 嗨,亚历山大!虽然我在没有使用它之前注意到“返回响应”,但也许是因为“中止管道执行”听起来有点像我不想使用的东西。我会尝试,但仍然不确定如何组合到身体。【参考方案2】:

添加到 Aleksander 的回答中,在 return-response policy 中,您可以通过两种方式组成最终正文

    使用策略表达式
<set-body>@
    var output = new
    
        success = true,
        var1 = context.Variables["var1"]
    ;
    return JsonConvert.SerializeObject(output);
</set-body>
    使用液体模板
<set-variable name="var1body" value="@((IResponse)context.Variables["var1"]).Body.As<string>())" />
<set-body template="liquid">
"success": true,
"var1": "context.Variables["var1body"]"
</set-body>

您可以在其文档中阅读有关 set-body policy 的更多信息。

【讨论】:

这个答案只缺少对 IResponse 的解析 :-) &lt;set-variable name="var1body" value="@((IResponse)context.Variables["var1"]).Body.As&lt;string&gt;())" /&gt; 如果你愿意添加它,我会接受它作为答案。 补充说。谢谢!

以上是关于如何在响应中将两个变量合并为一个? [复制]的主要内容,如果未能解决你的问题,请参考以下文章

如何在angularjs中合并两个对象数组?

如何在 jQuery 中将 2 个数组合并为 1 个数组? [复制]

如何在 PySpark 中将两个 rdd 合并为一个

如何在Java中将两个PDF文件合并为一个?

如何通过在 Python 中将两个列表合并为一个,使用 CSV 模块或 Pandas 写入 csv 或 Excel 文件?

如何在 Tkinter 中将文本条目存储为变量? [复制]