Denetim akışı

UYGULANANLAR: Tüm API Management katmanları

choose Boole ifadelerinin değerlendirme sonuçlarına göre ilke deyimlerini koşullu olarak uygulamak için ilkeyi kullanın. Denetim akışı için ilkeyi if-then-else veya bir programlama dilindeki anahtar yapısına benzer şekilde kullanın.

Not

İlkenin öğelerini ve alt öğelerini ilke bildiriminde sağlanan sırayla ayarlayın. API Management ilkelerini ayarlama veya düzenleme hakkında daha fazla bilgi edinin.

İlke bildirimi

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

İlke choose en az bir <when/> öğe içermelidir. <otherwise/> öğesi isteğe bağlıdır. Öğelerdeki <when/> koşullar, ilke içindeki görünümlerine göre değerlendirilir. koşul özniteliği eşittir olan ilk <when/> öğenin içine alınmış ilke deyimleri true uygulanır. Öğesi içinde <otherwise/> yer alan ilkeler varsa, tüm <when/> öğe koşulu öznitelikleri falseise uygulanır.

Öğeler

Öğe Açıklama Gerekli
Ne zaman… İlkenin if veya bölümlerini choose belirten bir veya ifelse daha fazla öğe. Birden çok when öğe belirtilirse, bunlar sıralı olarak değerlendirilir. condition öğesi olarak değerlendirildiğindetrue, başka when bir koşul değerlendirilmez. Yes
Aksi takdir -de Koşulların hiçbiri when olarak değerlendirilmezse değerlendirilecek trueilke parçacığı. Hayır

when öznitelikleri

Öznitelik Açıklama Gerekli
koşul İçeren when ilke deyimi değerlendirildiğinde değerlendirilecek Boole ifadesi veya Boole sabiti. Yes

Kullanım

Örnekler

Kullanıcı aracısı temelinde istek ve yanıtı değiştirme

Aşağıdaki örnekte bir set-variable ilkesi ve iki denetim akışı ilkesi gösterilmektedir.

Değişken kümesi ilkesi gelen bölümündedir ve istek üst bilgisi veya metnini içeriyorsa true User-Agent olarak ayarlanmış bir isMobile Boole bağlam değişkeni iPadiPhoneoluşturur.

İlk denetim akışı ilkesi de gelen bölümündedir ve bağlam değişkeninin değerine bağlı olarak iki Küme sorgusu dizesi parametre ilkesinden isMobile birini koşullu olarak uygular.

İkinci denetim akışı ilkesi giden bölümündedir ve olarak ayarlandığında XML'yi JSON'a Dönüştür ilkesini isMobile koşullu olarak uygular.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>

Yanıtı ürün adına göre değiştirme

Bu örnekte, ürünü kullanırken arka uç hizmetinden alınan yanıttan veri öğelerini kaldırarak içerik filtreleme işleminin nasıl gerçekleştirildiği gösterilmektedir Starter . Örnek arka uç yanıtı, OpenWeather One Call API'sine benzer kök düzeyinde özellikler içerir.

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

İlkelerle çalışma hakkında daha fazla bilgi için bkz: