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 . |
Sì |
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 . |
Sì |
Utilizzo
- Sezioni del criterio: inbound, outbound, backend, on-error
- Ambiti del criterio: globale, area di lavoro, prodotto, API, operazione
- Gateway: classico, v2, consumo, self-hosted, area di lavoro
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>
Criteri correlati
Contenuto correlato
Per ulteriori informazioni sull'utilizzo dei criteri, vedere:
- Esercitazione: trasformare e proteggere l'API
- Informazioni di riferimento sui criteri per un elenco completo delle istruzioni dei criteri e delle relative impostazioni
- Espressioni di criteri
- Impostare o modificare criteri
- Riutilizzare le configurazioni dei criteri
- Repository dei frammenti di criteri
- Creare criteri usando Microsoft Copilot in Azure