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
- Richtlinienabschnitte: inbound, outbound, backend, on-error
- Richtlinienbereiche: global, Arbeitsbereich, Produkt, API, Vorgang
- Gateways: klassisch, v2, Verbrauch, selbstgehostet, Arbeitsbereich
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
-isMobile
variable, 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>
Verwandte Richtlinien
Zugehöriger Inhalt
Weitere Informationen zum Arbeiten mit Richtlinien finden Sie hier:
- Tutorial: Transformieren und Schützen Ihrer API
- Unter Richtlinien für die API-Verwaltung finden Sie eine komplette Liste der Richtlinienanweisungen und der zugehörigen Einstellungen.
- Richtlinienausdrücke
- Festlegen oder Bearbeiten von Richtlinien
- Wiederverwenden von Richtlinienkonfigurationen
- Repository für Richtliniencodeausschnitte
- Azure API Management-Richtlinientoolkit
- Erstellen von Richtlinien mit Microsoft Copilot in Azure