Flusso di controllo

SI APPLICA A: Tutti i livelli di Gestione API

Usare il criterio choose per applicare in modo condizionale le istruzioni dei criteri sulla base dei risultati della valutazione di espressioni booleane. Usare il criterio per il flusso di controllo simile a un costrutto if-then-else o switch in un linguaggio di programmazione.

Nota

Impostare gli elementi e gli elementi figlio del criterio nell'ordine specificato nell'istruzione del criterio. Altre informazioni su come impostare o modificare i criteri di API Management.

Istruzione del criterio

<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>

Il criterio choose deve contenere almeno un elemento <when/>. L'elemento <otherwise/> è facoltativo. Le condizioni negli elementi <when/> vengono valutate in ordine di visualizzazione all'interno del criterio. Si applicano le istruzioni del criterio incluse all'interno del primo elemento <when/> con attributo di condizione uguale a true. I criteri inclusi all'interno dell'elemento <otherwise/>, se presente, vengono applicati se tutti gli attributi di condizione dell'elemento <when/> sono false.

Elementi

Elemento Descrizione Richiesto
Quando… Uno o più elementi che specificano le parti if o ifelse del criterio choose. Se vengono specificati più elementi when, questi vengono valutati in sequenza. Una volta che la condition di un elemento when risulta true, non vengono valutate altre condizioni when.
otherwise Frammento di criterio da valutare se nessuna delle condizioni when restituisce true. No

Attributi when

Attributo Descrizione Richiesto
condizione Costante o espressione booleana da valutare quando viene restituita l'istruzione contenente il criterio when.

Utilizzo

Esempi

Modificare la richiesta e la risposta in base all'agente utente

L'esempio seguente illustra un criterio set-variable e due criteri di flusso di controllo.

Il criterio di impostazione della variabile si trova nella sezione in ingresso e crea isMobile, una variabile di contesto booleana, che è impostata su true se l'intestazione della richiesta User-Agent contiene il testo iPad o iPhone.

Il primo criterio di flusso di controllo è disponibile anche nella sezione in ingresso e applica in modo condizionale uno dei due criteri Imposta parametro di stringa della query in base al valore della variabile di contesto isMobile.

Il secondo criterio di flusso di controllo si trova nella sezione in uscita e applica in modo condizionale il criterio Converti XML in JSON quando isMobile è impostato su 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>

Modificare la risposta in base al nome del prodotto

Questo esempio mostra come eseguire operazioni di filtro sui contenuti rimuovendo elementi di dati dalla risposta ricevuta dal servizio back-end quando si usa il prodotto Starter. La risposta back-end di esempio include proprietà a livello radice simili all'API OpenWeather One Call.

<!-- 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>

Per ulteriori informazioni sull'utilizzo dei criteri, vedere: