Kontrollflöde
GÄLLER FÖR: Alla API Management-nivåer
Använd principen choose
för att villkorligt tillämpa principinstruktioner baserat på resultatet av utvärderingen av booleska uttryck. Använd principen för kontrollflöde som liknar en if-then-else eller en växelkonstruktion på ett programmeringsspråk.
Kommentar
Ange principens element och underordnade element i den ordning som anges i principbeskrivningen. Läs mer om hur du anger eller redigerar API Management-principer.
Principuttryck
<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>
Principen choose
måste innehålla minst ett <when/>
element. Elementet <otherwise/>
är valfritt. Villkor i <when/>
element utvärderas i ordning efter deras utseende i principen. Principinstruktor som omges av det första <when/>
elementet med villkorsattributet true
är lika med tillämpas. Principer som omges av elementet, om de <otherwise/>
finns, tillämpas om alla <when/>
elementvillkorsattribut är false
.
Element
Element | Description | Obligatoriskt |
---|---|---|
När… | Ett eller flera element som if anger eller ifelse delar av choose principen. Om flera when element anges utvärderas de sekventiellt. När elementet condition när utvärderas till true utvärderas inga ytterligare when villkor. |
Ja |
annars | Principfragmentet som ska utvärderas om inget av when villkoren utvärderas till true . |
Nej |
när attribut
Attribut | beskrivning | Obligatoriskt |
---|---|---|
villkor | Det booleska uttrycket eller den booleska konstanten som ska utvärderas när den innehållande when principsatsen utvärderas. |
Ja |
Användning
- Principavsnitt: inkommande, utgående, serverdel, on-error
- Principomfattningar: global, arbetsyta, produkt, API, åtgärd
- Gatewayer: klassisk, v2, förbrukning, lokalt installerad, arbetsyta
Exempel
Ändra begäran och svar baserat på användaragent
I följande exempel visas en princip för uppsättningsvariabler och två principer för kontrollflöde.
Den angivna variabelprincipen finns i avsnittet inkommande och skapar en isMobile
boolesk kontextvariabel som är inställd på true om User-Agent
begärandehuvudet innehåller texten iPad
eller iPhone
.
Den första kontrollflödesprincipen finns också i avsnittet inkommande och tillämpar villkorligt en av två ange principer för frågesträngsparametrar beroende på värdet för isMobile
kontextvariabeln.
Den andra kontrollflödesprincipen finns i avsnittet utgående och tillämpar villkorsstyrt principen Konvertera XML till JSON när isMobile
den är inställd på 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>
Ändra svar baserat på produktnamn
Det här exemplet visar hur du utför innehållsfiltrering genom att ta bort dataelement från svaret som tas emot från serverdelstjänsten när du Starter
använder produkten. Exempelserverdelssvaret innehåller egenskaper på rotnivå som liknar API:et för 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>
Relaterade principer
Relaterat innehåll
Mer information om hur du arbetar med principer finns i:
- Självstudie: Transformera och skydda ditt API
- Principreferens för en fullständig lista över principinstruktioner och deras inställningar
- Principuttryck
- Ange eller redigera principer
- Återanvända principkonfigurationer
- Lagringsplats för principfragment
- Skapa principer med Microsoft Copilot i Azure