Поток управления
ОБЛАСТЬ ПРИМЕНЕНИЯ: все уровни Управление API
choose
Используйте политику для условного применения инструкций политики на основе результатов оценки логических выражений. Используйте политику для потока управления, аналогичного конструкции if-then-else или коммутатора на языке программирования.
Примечание.
Задайте элементы политики и дочерние элементы в порядке, указанном в правиле политики. Узнайте, как устанавливать или изменять политики службы управления API.
Правило политики
<choose>
<when condition="Boolean expression | Boolean constant">
<!— one or more policy statements to be applied if the above condition is true -->
</when>
<when condition="Boolean expression | Boolean constant">
<!— one or more policy statements to be applied if the above condition is true -->
</when>
<otherwise>
<!— one or more policy statements to be applied if none of the above conditions are true -->
</otherwise>
</choose>
Политика choose
должна содержать по крайней мере один <when/>
элемент. Элемент <otherwise/>
необязательный. Условия в элементах <when/>
вычисляются в порядке их расположения в политике. Будут применены правила политики, включенные в первом элементе <when/>
с атрибутом условия true
. Политики, включенные в элементе <otherwise/>
(если он имеется), будут применены, если все атрибуты условий элемента <when/>
имеют значение false
.
Элементы
Элемент | Description | Обязательное поле |
---|---|---|
Если... | Один или несколько элементов, if указывающих или ifelse части choose политики. Если задано несколько when элементов, они оцениваются последовательно. Когда condition элемента when принимает значение true , никакие последующие условия when не вычисляются. |
Да |
otherwise | Фрагмент политики, который необходимо оценить, если ни одно из условий when не оценивается true . |
No |
Когда атрибуты
Атрибут | Description | Обязательное поле |
---|---|---|
condition | Логическое выражение или логическая константа, вычисляемая при when оценке содержащего оператора политики. |
Да |
Использование
- Разделы политики: inbound, outbound, backend, on-error.
- Области политики: глобальная, рабочая область, продукт, API, операция
- Шлюзы: классическая, версия 2, потребление, локальное размещение, рабочая область
Примеры
Изменение запроса и ответа на основе агента пользователя
В следующем примере демонстрируется политика set-variable и две политики управления потоками.
Политика задания переменной находится в разделе inbound и создает логическую переменную контекстаisMobile
, которой присваивается значение true, если заголовок запроса User-Agent
содержит текст iPad
или iPhone
.
Первая политика управления потоками также находится в разделе inbound и условно применяет одну из двух политик установки параметра строки запроса в зависимости от значения переменной контекста isMobile
.
Вторая политика управления потоками находится в разделе outbound и условно применяет политику преобразования XML в JSON, если переменная isMobile
имеет значение true
.
<policies>
<inbound>
<set-variable name="isMobile" value="@(context.Request.Headers.GetValueOrDefault("User-Agent","").Contains("iPad") || context.Request.Headers.GetValueOrDefault("User-Agent","").Contains("iPhone"))" />
<base />
<choose>
<when condition="@(context.Variables.GetValueOrDefault<bool>("isMobile"))">
<set-query-parameter name="mobile" exists-action="override">
<value>true</value>
</set-query-parameter>
</when>
<otherwise>
<set-query-parameter name="mobile" exists-action="override">
<value>false</value>
</set-query-parameter>
</otherwise>
</choose>
</inbound>
<outbound>
<base />
<choose>
<when condition="@(context.Variables.GetValueOrDefault<bool>("isMobile"))">
<xml-to-json kind="direct" apply="always" consider-accept-header="false"/>
</when>
</choose>
</outbound>
</policies>
Изменение ответа на основе имени продукта
В этом примере показано, как выполнить фильтрацию содержимого путем удаления элементов данных из ответа, полученного из внутренней службы при использовании продукта Starter
. Пример ответа серверной части содержит свойства корневого уровня, аналогичные API вызовов OpenWeather One.
<!-- Copy this snippet into the outbound section to remove a number of data elements from the response received from the backend service based on the name of the product -->
<choose>
<when condition="@(context.Response.StatusCode == 200 && context.Product.Name.Equals("Starter"))">
<set-body>@{
var response = context.Response.Body.As<JObject>();
foreach (var key in new [] {"current", "minutely", "hourly", "daily", "alerts"}) {
response.Property (key).Remove ();
}
return response.ToString();
}
</set-body>
</when>
</choose>
Связанные политики
Связанный контент
Дополнительные сведения о работе с политиками см. в нижеуказанных статьях.
- Руководство. Преобразование и защита API
- Полный перечень операторов политик и их параметров см. в справочнике по политикам.
- Выражения политики
- Настройка или изменение политик
- Повторное использование конфигураций политик
- Репозиторий фрагментов политик
- Создание политик с помощью Microsoft Copilot в Azure