Fluxo de controle
APLICA-SE A: todas as camadas do Gerenciamento de API
Use a política choose
para aplicar condicionalmente instruções de política com base nos resultados da avaliação de expressões boolianas. Use a política para o fluxo de controle semelhante a um constructo if-then-else ou switch em uma linguagem de programação.
Observação
Defina os elementos da política e os elementos filho na ordem fornecida na declaração da política. Saiba mais sobre como definir e editar as 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 política choose
deve conter pelo menos um elemento <when/>
. O elemento <otherwise/>
é opcional. As condições nos elementos <when/>
são avaliadas na ordem de aparecimento na política. As declarações de política incluídas dentro do primeiro elemento <when/>
com atributo de condição igual a true
serão aplicadas. As políticas incluídas dentro do elemento <otherwise/>
, se estiverem presentes, serão aplicadas se todos os atributos de condição do elemento <when/>
forem false
.
Elementos
Elemento | Descrição | Obrigatório |
---|---|---|
when | Um ou mais elementos que especificam as if ou ifelse partes da política choose . Se vários elementos when forem especificados, eles serão avaliados sequencialmente. Uma vez que o condition de um elemento when é avaliado como true , nenhuma outra condição when é avaliada. |
Yes |
otherwise | O snippet de código da política a ser avaliado se nenhuma das condições when for avaliada como true . |
Não |
quando atributos
Atributo | Descrição | Obrigatório |
---|---|---|
condition | A expressão booleana ou expressão booliana a ser avaliada quando a declaração de política contendo when é avaliada. |
Yes |
Uso
- Seções da política: entrada, saída, back-end, em caso de erro
- Escopos de política: global, espaço 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 variável definida e duas políticas de fluxo de controle.
A política de definir variável está na seção de entrada e cria uma variável de isMobile
booliana isMobile
que será definida como true se o cabeçalho da solicitação User-Agent
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 de duas políticas Definir parâmetro de cadeia de caracteres de consulta dependendo do valor da variável de contexto isMobile
.
A segunda política de fluxo de controle está na seção de saída e aplica condicionalmente a política Converter XML para JSON quando isMobile
é 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 produto Starter
. A resposta de back-end de exemplo inclui propriedades de nível de raiz semelhantes à API de chamada 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údo relacionado
Para obter mais informações sobre como trabalhar com políticas, consulte:
- Tutorial: Transformar e proteger sua API
- Referência de Política para uma lista completa das instruções de política e suas configurações
- Expressões de política
- Definir ou editar políticas
- Reutilizar configurações de política
- Repositório de snippets de política
- Kit de ferramentas de políticas do Gerenciamento de API do Azure
- Criar políticas usando o Microsoft Copilot no Azure