Fluxo de controlo
APLICA-SE A: Todas as camadas de gerenciamento de API
Use a choose
política para aplicar condicionalmente declarações de política com base nos resultados da avaliação de expressões booleanas. Use a política para fluxo de controle semelhante a uma construção if-then-else ou switch em uma linguagem de programação.
Nota
Defina os elementos da política e os elementos filho na ordem fornecida na declaração de política. Saiba mais sobre como definir ou editar políticas de Gerenciamento de API.
Declaração de política
<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>
A choose
política deve conter pelo menos um <when/>
elemento. O <otherwise/>
elemento é opcional. As condições dos <when/>
elementos são avaliadas por ordem de aparecimento na política. A(s) declaração(ões) de política incluída(s) no primeiro <when/>
elemento com atributo de true
condição igual a será aplicada. As políticas incluídas no <otherwise/>
elemento , se presentes, serão aplicadas se todos os <when/>
atributos de condição do elemento forem false
.
Elementos
Elemento | Description | Obrigatório |
---|---|---|
Quando… | Um ou mais elementos que especificam as if partes da choose ifelse política. Se vários when elementos forem especificados, eles serão avaliados sequencialmente. Uma vez que o condition elemento de um quando é avaliado como true , nenhuma outra when condição é avaliada. |
Sim |
caso contrário, | O trecho da política a ser avaliado se nenhuma das when condições for avaliada como true . |
Não |
quando atributos
Atributo | Description | Obrigatório |
---|---|---|
condição | A expressão booleana ou constante booleana a ser avaliada quando a declaração de política que contém when é avaliada. |
Sim |
Utilização
- Seções de política: entrada, saída, back-end, no erro
- Âmbitos de política: global, área de trabalho, produto, API, operação
- Gateways: clássico, v2, consumo, auto-hospedado, espaço de trabalho
Exemplos
Modificar solicitação e resposta com base no agente do usuário
O exemplo a seguir demonstra uma política set-variable e duas políticas de fluxo de controle.
A política de variável definida está na seção de entrada e cria uma variável de isMobile
contexto booleano que é definida como true se o cabeçalho da User-Agent
solicitação contiver o texto iPad
ou iPhone
.
A primeira política de fluxo de controle também está na seção de entrada e aplica condicionalmente uma das duas políticas de parâmetro de cadeia de caracteres de consulta set dependendo do valor da isMobile
variável de contexto.
A segunda política de fluxo de controle está na seção de saída e aplica condicionalmente a política Converter XML em JSON quando isMobile
estiver definida como 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>
Modificar a resposta com base no nome do produto
Este exemplo mostra como executar a filtragem de conteúdo removendo elementos de dados da resposta recebida do serviço de back-end ao usar o Starter
produto. O exemplo de resposta de back-end inclui propriedades de nível raiz semelhantes à API de chamada do 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>
Políticas relacionadas
Conteúdos relacionados
Para obter mais informações sobre como trabalhar com políticas, consulte:
- Tutorial: Transforme e proteja sua API
- Referência de política para uma lista completa de declarações de política e suas configurações
- Expressões de política
- Definir ou editar políticas
- Reutilizar configurações de política
- Recompra de trechos de política
- Kit de ferramentas de política de Gerenciamento de API do Azure
- Criar políticas usando o Microsoft Copilot no Azure