从 Azure Apim 的上下文中读取命名值

Posted

技术标签:

【中文标题】从 Azure Apim 的上下文中读取命名值【英文标题】:Read Named values from the context in Azure Apim 【发布时间】:2018-08-20 12:36:19 【问题描述】:

我正在定义一个入站策略并尝试从 2 个组件构建一个 URL。我知道如何获得这些值 1 但 1 但是当我必须将它们组合成一个时无法弄清楚语法。

首先我调用一个 api 并保存响应

<send-request mode="copy" response-variable-name="createdUser" timeout="20" ignore-error="false">
        <set-url>Systems.One.Endpoint/services/rest</set-url>
</send-request> 

我可以像这样追踪我的反应是好的

<trace source="Contact Id">@(((IResponse)context.Variables["createdUser"]).Body.As<JObject>()["contactId"])</trace>

但我不知道如何从 System.One.Endpoint 和 @(((IResponse)context.Variables["createdUser"]).Body.As()["contactId" 创建一个 url ])

这里不行

<send-request mode="copy" response-variable-name="createPeriod" timeout="seconds" ignore-error="true">
 <set-url>
        System.Two.Endpoint/api/@(((IResponse)context.Variables["createPeriod"]).Body.As<JObject>()["contactId"])/createperiod/DefaultPeriodlength
</set-url>

@ 之后的所有内容都只是设置为字符串,而不是从变量的实际值中加载

如何结合这两个值?

【问题讨论】:

【参考方案1】:

策略表达式只能用于生成元素/属性的完整值。合同中的命名值可用于表示任何属性/元素值的任何部分,并在分析/执行之前插入到策略中。所以像这样:

<set-url>@("System.Two.Endpoint/api/" + ((IResponse)context.Variables["createPeriod"]).Body.As<JObject>()["contactId"].ToString() + "/createperiod/DefaultPeriodlength")</set-url>

或者如果您更喜欢字符串插值:

<set-url>@($"System.Two.Endpoint/api/((IResponse)context.Variables["createPeriod"]).Body.As<JObject>()["contactId"]/createperiod/DefaultPeriodlength")</set-url>

【讨论】:

这看起来并不难。我首先成功地将命名值复制到变量中,但这更漂亮

以上是关于从 Azure Apim 的上下文中读取命名值的主要内容,如果未能解决你的问题,请参考以下文章

Azure APIM 策略

APIM:从 Azure DevOps CD 管道中的 Azure Blob 存储中检索策略 XML 失败,如收到错误,如提供的链接格式错误

从 APIM 策略获取 Azure 表存储实体

Azure WebJobs ServiceBus 返回异常:在授权上下文中找到 2 个 DNS 声明

通过命名值重用 APIM 策略表达式

使用 Azure APIM 策略处理表单数据