Controlestroom

VAN TOEPASSING OP: Alle API Management-lagen

Gebruik het choose beleid om beleidsinstructies voorwaardelijk toe te passen op basis van de resultaten van de evaluatie van Boole-expressies. Gebruik het beleid voor controlestroom die vergelijkbaar is met een if-then-else of een switchconstructie in een programmeertaal.

Notitie

Stel de elementen en onderliggende elementen van het beleid in de volgorde in die in de beleidsverklaring is opgegeven. Meer informatie over het instellen of bewerken van API Management-beleid.

Beleidsinstructie

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

Het choose beleid moet ten minste één <when/> element bevatten. Het <otherwise/> element is optioneel. Voorwaarden in <when/> elementen worden geëvalueerd in volgorde van hun uiterlijk binnen het beleid. Beleidsinstructie(s) die binnen het eerste <when/> element met het kenmerk Voorwaarde gelijk true zijn, worden toegepast. Beleidsregels die zijn opgenomen in het <otherwise/> element, indien aanwezig, worden toegepast als alle kenmerken van de <when/> elementvoorwaarde zijn false.

Elementen

Element Beschrijving Vereist
Als… Een of meer elementen die de if of ifelse onderdelen van het choose beleid opgeven. Als er meerdere when elementen zijn opgegeven, worden ze opeenvolgend geëvalueerd. Zodra een condition element wordt geëvalueerd true, worden er geen verdere when voorwaarden geëvalueerd. Ja
Anders Het beleidsfragment dat moet worden geëvalueerd als geen van de when voorwaarden resulteert in true. Nee

wanneer kenmerken

Kenmerk Beschrijving Vereist
voorwaarde De Boole-expressie of booleaanse constante die moet worden geëvalueerd wanneer de beleidsinstructie wordt when geëvalueerd. Ja

Gebruik

Voorbeelden

Aanvraag en antwoord wijzigen op basis van gebruikersagent

In het volgende voorbeeld ziet u een setvariabele beleid en twee controlestroombeleidsregels.

Het beleid voor ingestelde variabelen bevindt zich in de binnenkomende sectie en maakt een isMobile Booleaanse contextvariabele die is ingesteld op waar als de User-Agent aanvraagheader de tekst iPad bevat of iPhone.

Het eerste controlestroombeleid bevindt zich ook in de sectie Inkomend verkeer en past voorwaardelijk een van de twee parameterbeleidsregels voor queryreeksen instellen toe, afhankelijk van de waarde van de isMobile contextvariabele.

Het tweede controlestroombeleid bevindt zich in de sectie Uitgaand en past voorwaardelijk het xml-bestand converteren naar JSON-beleid toe wanneer isMobile dit is ingesteld op 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>

Antwoord wijzigen op basis van productnaam

In dit voorbeeld ziet u hoe u inhoudsfiltering uitvoert door gegevenselementen te verwijderen uit het antwoord dat is ontvangen van de back-endservice wanneer u het Starter product gebruikt. Het voorbeeld van een back-endantwoord bevat eigenschappen op hoofdniveau die vergelijkbaar zijn met de OpenWeather One-aanroep-API.

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

Zie voor meer informatie over het werken met beleid: