Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
ОБЛАСТЬ ПРИМЕНЕНИЯ: все уровни Управление 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.
Элементы
| Элемент | Описание | Обязательное поле |
|---|---|---|
| Если... | Один или несколько элементов, if указывающих или ifelse части choose политики. Если задано несколько when элементов, они оцениваются последовательно. Когда condition элемента when принимает значение true, никакие последующие условия when не вычисляются. |
Да |
| иначе | Фрагмент политики, который необходимо оценить, если ни одно из условий when не оценивается true. |
нет |
Когда атрибуты
| Атрибут | Описание | Обязательное поле |
|---|---|---|
| условие | Логическое выражение или логическая константа, вычисляемая при 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
- Полный перечень операторов политик и их параметров см. в справочнике по политикам.
- Выражения политики
- Настройка или изменение политик
- Повторное использование конфигураций политик
- Репозиторий фрагментов политик
- репозиторий Policy
- Набор средств политики Управление API Azure
- Получите помощь Copilot для создания, объяснения и устранения неполадок в политике