Flusso di controllo

SI APPLICA A: Tutti i livelli di Gestione API

Usare il choose criterio per applicare in modo condizionale le istruzioni dei criteri in base ai risultati della valutazione delle 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 dei criteri. Altre informazioni su come impostare o modificare i criteri di Gestione API.

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 choose criterio deve contenere almeno un <when/> elemento. 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 if parti o ifelse dei choose criteri. Se vengono specificati più when elementi, vengono valutati in sequenza. Una volta che la condition di un elemento when risulta true, non vengono valutate altre condizioni when.
otherwise Frammento di criteri da valutare se nessuna delle when condizioni restituisce true. No

quando gli attributi

Attributo Descrizione Richiesto
condizione Espressione booleana o costante booleana da valutare quando viene valutata l'istruzione criteri contenitore 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: