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

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>

Para obter mais informações sobre como trabalhar com políticas, consulte: