Как установить значение для элемента XML с помощью Set-body Policy of API Management - PullRequest
0 голосов
/ 14 февраля 2020

В этом случае я хочу сначала получить accessTokenTest, затем я создам запрос SOAP с помощью этого accessTokenTest. Но у меня проблема с добавлением этого 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>

enter image description here

1 Ответ

0 голосов
/ 17 февраля 2020

При использовании жидких шаблонов в политике set-body существует другой синтаксис для доступа к объекту 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>
...