Tok řízení
PLATÍ PRO: Všechny úrovně služby API Management
choose
Pomocí zásad můžete podmíněně použít prohlášení o zásadách na základě výsledků vyhodnocení logických výrazů. Použijte zásadu pro tok řízení podobný konstruktoru if-then-else nebo switch v programovacím jazyce.
Poznámka:
Nastavte prvky zásad a podřízené prvky v pořadí uvedeném v prohlášení o zásadách. Přečtěte si další informace o tom, jak nastavit nebo upravit zásady služby API Management.
Prohlášení o zásadách
<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>
Zásada choose
musí obsahovat alespoň jeden <when/>
prvek. Prvek <otherwise/>
je nepovinný. Podmínky v <when/>
elementech se vyhodnocují v pořadí jejich vzhledu v rámci zásad. Použijí se příkazy zásad uzavřené v prvním <when/>
prvku s atributem podmínky equals true
. Zásady uzavřené v elementu<otherwise/>
, pokud existují, budou použity, pokud jsou false
všechny <when/>
atributy podmínky elementu .
Elementy
Element (Prvek) | Popis | Povinní účastníci |
---|---|---|
Když... | Jeden nebo více prvků určujících if choose nebo ifelse části zásad. Pokud je zadáno více when prvků, vyhodnocují se postupně. Jakmile se condition prvek when vyhodnotí jako true , nebudou vyhodnoceny žádné další when podmínky. |
Ano |
jinak | Fragment zásad, který se má vyhodnotit, pokud se žádná z when podmínek nevyhodnotí jako true . |
No |
when attributes
Atribut | Popis | Povinní účastníci |
---|---|---|
condition | Logický výraz nebo logická konstanta, která se má vyhodnotit při vyhodnocení obsahujícího when prohlášení o zásadách. |
Ano |
Využití
- Oddíly zásad: příchozí, odchozí, back-end, on-error
- Obory zásad: globální, pracovní prostor, produkt, rozhraní API, operace
- Brány: Classic, v2, consumption, self-host, workspace
Příklady
Úprava požadavku a odpovědi na základě uživatelského agenta
Následující příklad ukazuje zásadu set-variable a dvě zásady toku řízení.
Zásada nastavených proměnných je v části příchozích dat a vytvoří logickou kontextovou proměnnouisMobile
, která je nastavená na true, pokud User-Agent
hlavička požadavku obsahuje text iPad
nebo iPhone
.
První zásada toku řízení je také v příchozí části a podmíněně použije jednu ze dvou zásad parametrů řetězce dotazu Set v závislosti na hodnotě isMobile
kontextové proměnné.
Druhá zásada toku řízení je v oddílu odchozích přenosů a podmíněně použije zásadu Convert XML na JSON , pokud isMobile
je nastavena na 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>
Úprava odpovědi na základě názvu produktu
Tento příklad ukazuje, jak provést filtrování obsahu odebráním datových prvků z odpovědi přijaté z back-endové služby při použití Starter
produktu. Příklad back-endové odpovědi obsahuje vlastnosti kořenové úrovně podobné rozhraní OpenWeather One Call 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>
Související zásady
Související obsah
Další informace o práci se zásadami najdete v tématech:
- Kurz: Transformace a ochrana rozhraní API
- Referenční informace o zásadách pro úplný seznam prohlášení o zásadách a jejich nastavení
- Výrazy zásad
- Nastavení nebo úprava zásad
- Opakované použití konfigurací zásad
- Úložiště fragmentů zásad
- Sada nástrojů zásad služby Azure API Management
- Vytváření zásad pomocí Microsoft Copilotu v Azure