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 falsevšechny <when/> atributy podmínky elementu .

Elementy

Element (Prvek) Popis Povinní účastníci
Když... Jeden nebo více prvků určujících ifchoose 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-hosted

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

Další informace o práci se zásadami najdete v tématech: