如何使用 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>