Partilhar via


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

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>

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