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

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>

Mer information om hur du arbetar med principer finns i: