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

时间:2018-08-20 12:36:20

标签: azure azure-api-management

我正在定义入站策略,并尝试从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” ])

这在这里不起作用

<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 个答案:

答案 0 :(得分: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>