如何使用 API 管理的 Set-body 策略将值设置为 XML 元素
How to set value to XML element with Set-body Policy of API Management
在这种情况下,我想先获得一个accessTokenTest,然后我将使用这个accessTokenTest 创建一个SOAP 请求。但是我在将此 accessTokenTest 添加到 XML 元素时遇到问题。除了将这个值填入 XML 之外,一切都很好。
<set-variable name="accessTokenTest" value="@(((IResponse)context.Variables["ABCOauth"]).Body.As<JObject>()["access_token"].ToString())" />
<set-body template="liquid">
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" xmlns="http://servicxxxx>
<soap:Body>
<GetUsersxxx>
<userIds>
{% for item in body.getUserxxxx.userIds -%}
<string>{{item}}</string>
{% endfor -%}
</userIds>
<credentials>
<Client>{{body.getUsersByUserId.credentials.client}}</Client>
<AccessToken>(string)context.Variables.GetValueOrDefault("accessTokenTest")</AccessToken>
</credentials>
</GetUsersxxxx>
</soap:Body>
</soap:Envelope>
</set-body>
在 set-body
policy 中使用 liquid 模板时,访问 context
对象的语法与文档中所示的不同,类似于您用于客户端值的语法。
在您的情况下,政策必须如下所示
<set-variable name="accessTokenTest" value="@(((IResponse)context.Variables["ABCOauth"]).Body.As<JObject>()["access_token"].ToString())" />
<set-body template="liquid">
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" xmlns="http://servicxxxx>
<soap:Body>
<GetUsersxxx>
<userIds>
{% for item in body.getUserxxxx.userIds -%}
<string>{{item}}</string>
{% endfor -%}
</userIds>
<credentials>
<Client>{{body.getUsersByUserId.credentials.client}}</Client>
<AccessToken>{{context.Variables["accessTokenTest"]}}</AccessToken>
</credentials>
</GetUsersxxxx>
</soap:Body>
</soap:Envelope>
</set-body>
在这种情况下,我想先获得一个accessTokenTest,然后我将使用这个accessTokenTest 创建一个SOAP 请求。但是我在将此 accessTokenTest 添加到 XML 元素时遇到问题。除了将这个值填入 XML 之外,一切都很好。
<set-variable name="accessTokenTest" value="@(((IResponse)context.Variables["ABCOauth"]).Body.As<JObject>()["access_token"].ToString())" />
<set-body template="liquid">
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" xmlns="http://servicxxxx>
<soap:Body>
<GetUsersxxx>
<userIds>
{% for item in body.getUserxxxx.userIds -%}
<string>{{item}}</string>
{% endfor -%}
</userIds>
<credentials>
<Client>{{body.getUsersByUserId.credentials.client}}</Client>
<AccessToken>(string)context.Variables.GetValueOrDefault("accessTokenTest")</AccessToken>
</credentials>
</GetUsersxxxx>
</soap:Body>
</soap:Envelope>
</set-body>
在 set-body
policy 中使用 liquid 模板时,访问 context
对象的语法与文档中所示的不同,类似于您用于客户端值的语法。
在您的情况下,政策必须如下所示
<set-variable name="accessTokenTest" value="@(((IResponse)context.Variables["ABCOauth"]).Body.As<JObject>()["access_token"].ToString())" />
<set-body template="liquid">
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" xmlns="http://servicxxxx>
<soap:Body>
<GetUsersxxx>
<userIds>
{% for item in body.getUserxxxx.userIds -%}
<string>{{item}}</string>
{% endfor -%}
</userIds>
<credentials>
<Client>{{body.getUsersByUserId.credentials.client}}</Client>
<AccessToken>{{context.Variables["accessTokenTest"]}}</AccessToken>
</credentials>
</GetUsersxxxx>
</soap:Body>
</soap:Envelope>
</set-body>