Ablaufsteuerung

GILT FÜR: Alle API Management-Ebenen

Verwenden Sie die choose-Richtlinie, um Richtlinienanweisungen basierend auf den Ergebnissen der Auswertung von booleschen Ausdrücken bedingt anzuwenden. Verwenden Sie die Richtlinie für die Ablaufsteuerung ähnlich einem if-then-else- oder switch-Konstrukt in einer Programmiersprache.

Hinweis

Legen Sie die Elemente und untergeordneten Elemente einer Richtlinie in der Reihenfolge fest, die in der Richtlinienanweisung angegeben ist. Erfahren Sie mehr darüber, wie Sie API Management-Richtlinien festlegen oder bearbeiten.

Richtlinienanweisung

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

Die choose-Richtlinie muss mindestens ein <when/>-Element enthalten. Das <otherwise/>-Element ist optional. Bedingungen in <when/>-Elementen werden in der Reihenfolge ihrer Anordnung in der Richtlinie ausgewertet. Richtlinienanweisungen, die in das erste <when/>-Element eingeschlossen sind und für die das Bedingungsattribut true lautet, werden angewendet. Richtlinien, die in das <otherwise/>-Element (falls vorhanden) eingeschlossen sind, werden angewendet, wenn alle Bedingungsattribute des <when/>-Elements false lauten.

Elemente

Element BESCHREIBUNG Erforderlich
when Ein oder mehrere Elemente zum Angeben der if- oder ifelse-Bestandteile der choose-Richtlinie. Wenn mehrere when-Elemente angegeben sind, werden sie sequenziell ausgewertet. Wenn die Bedingung (condition) eines when-Elements bei der Auswertung true ergibt, werden keine weiteren when-Bedingungen ausgewertet. Ja
otherwise Enthält das Richtliniencodeschnipsel, das ausgewertet werden soll, wenn keine der when-Bedingungen zu true ausgewertet wird. Nein

when-Attribute

attribute BESCHREIBUNG Erforderlich
condition Der boolesche Ausdruck oder die boolesche Konstante, der bzw. die ausgewertet werden soll, wenn die in der when-Bedingung enthaltene Richtlinienanweisung ausgewertet wird. Ja

Verwendung

Beispiele

Ändern von Anforderung und Antwort basierend auf dem Benutzer-Agent

Das folgende Beispiel zeigt eine set-variable-Richtlinie und zwei Ablaufsteuerungsrichtlinien.

Die „set-variable“-Richtlinie befindet sich im Abschnitt für den eingehenden Datenverkehr und erstellt eine boolesche isMobile-isMobilevariable, die auf „true“ festgelegt ist, wenn der User-Agent-Anforderungsheader den Text iPad oder iPhone enthält.

Die erste Ablaufsteuerungsrichtlinie befindet sich ebenfalls im Abschnitt für eingehenden Datenverkehr und wendet bedingungsabhängig eine von zwei Richtlinien vom Typ Abfrageparameter setzen an. Dies richtet sich nach dem Wert der Kontextvariablen isMobile.

Die zweite Ablaufsteuerungsrichtlinie befindet sich im Abschnitt für den ausgehenden Datenverkehr und wendet die Richtlinie vom Typ XML zu JSON konvertieren bedingungsabhängig an, wenn isMobile auf true festgelegt ist.

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

Ändern der Antwort basierend auf dem Produktnamen

In diesem Beispiel wird gezeigt, wie Inhalte gefiltert werden, indem Datenelemente aus der über den Back-End-Dienst empfangenen Antwort entfernt werden, wenn das Produkt Starter verwendet wird. Die Back-End-Beispielantwort enthält Eigenschaften auf Stammebene, die der OpenWeather One Call-API ähneln.

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

Weitere Informationen zum Arbeiten mit Richtlinien finden Sie hier: