Przepływ sterowania
DOTYCZY: Wszystkie warstwy usługi API Management
choose
Użyj zasad, aby warunkowo stosować instrukcje zasad na podstawie wyników oceny wyrażeń logicznych. Użyj zasad dla przepływu sterowania podobnego do konstrukcji if-then-else lub przełącznika w języku programowania.
Uwaga
Ustaw elementy zasad i elementy podrzędne w kolejności podanej w instrukcji zasad. Dowiedz się więcej na temat ustawiania lub edytowania zasad usługi API Management.
Instrukcja zasad
<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>
Zasady choose
muszą zawierać co najmniej jeden <when/>
element. Element <otherwise/>
jest opcjonalny. Warunki w <when/>
elementach są oceniane w kolejności ich wyglądu w ramach zasad. Zostaną zastosowane instrukcje zasad ujęte w pierwszym <when/>
elemecie z atrybutem warunku równe true
. Zasady ujęte w elemercie <otherwise/>
, jeśli są obecne, zostaną zastosowane, jeśli wszystkie <when/>
atrybuty warunku elementu to false
.
Elementy
Element | opis | Wymagania |
---|---|---|
Kiedy… | Co najmniej jeden element określający if lub ifelse części choose zasad. Jeśli określono wiele when elementów, są one oceniane sekwencyjnie. condition Gdy element when oblicza true wartość , nie zostaną ocenione żadne dalsze when warunki. |
Tak |
inaczej | Fragment kodu zasad do oceny, jeśli żaden z when warunków nie ma wartości true . |
Nie. |
kiedy atrybuty
Atrybut | opis | Wymagania |
---|---|---|
condition | Wyrażenie logiczne lub stała logiczna, która ma być oceniana podczas obliczania instrukcji zawierającej when zasady. |
Tak |
Użycie
- Sekcje zasad: ruch przychodzący, wychodzący, zaplecze, błąd
- Zakresy zasad: globalny, obszar roboczy, produkt, interfejs API, operacja
- Bramy: klasyczne, v2, zużycie, self-hosted, obszar roboczy
Przykłady
Modyfikowanie żądania i odpowiedzi na podstawie agenta użytkownika
W poniższym przykładzie przedstawiono zasady ustawiania zmiennych i dwie zasady przepływu sterowania.
Zasady zmiennej zestawu znajdują się w sekcji ruchu przychodzącego i tworzy zmienną kontekstową logiczną ustawioną isMobile
na wartość true, jeśli User-Agent
nagłówek żądania zawiera tekst iPad
lub iPhone
.
Pierwsze zasady przepływu sterowania są również w sekcji przychodzącej i warunkowo stosuje jedną z dwóch zasad parametrów ustaw ciąg zapytania w zależności od wartości zmiennej isMobile
kontekstowej.
Druga zasada przepływu sterowania znajduje się w sekcji ruchu wychodzącego i warunkowo stosuje zasady Konwertuj xml na JSON , gdy isMobile
jest ustawiona na true
wartość .
<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>
Modyfikowanie odpowiedzi na podstawie nazwy produktu
W tym przykładzie pokazano, jak przeprowadzić filtrowanie zawartości przez usunięcie elementów danych z odpowiedzi odebranej z usługi zaplecza Starter
podczas korzystania z produktu. Przykładowa odpowiedź zaplecza zawiera właściwości na poziomie głównym podobne do interfejsu API 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>
Powiązane zasady
Powiązana zawartość
Aby uzyskać więcej informacji na temat pracy z zasadami, zobacz:
- Samouczek: przekształcanie i ochrona interfejsu API
- Dokumentacja zasad dla pełnej listy instrukcji zasad i ich ustawień
- Wyrażenia zasad
- Ustawianie lub edytowanie zasad
- Ponowne używanie konfiguracji zasad
- Repozytorium fragmentów zasad
- Tworzenie zasad przy użyciu rozwiązania Microsoft Copilot na platformie Azure