控制流程
適用於:所有 APIM 層
利用 choose
原則,根據布林運算式的評估結果,有條件地套用原則陳述式。 使用類似程式設計語言中 if-then-else 或 switch 構造的控制流程原則。
注意
請依照原則陳述式中提供的順序,來設定原則的元素和子元素。 深入了解如何設定或編輯 APIM 原則。
原則陳述式
<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>
choose
原則必須至少包含一個 <when/>
元素。 <otherwise/>
項目是選擇性的。 <when/>
元素中的條件會依照其在原則內的外觀順序進行評估。 系統會套用條件屬性等於 true
的第一個 <when/>
元素內所括住的原則陳述式。 如果所有 <when/>
元素的條件屬性都是 false
,則會套用 <otherwise/>
元素內所括住的原則 (如果有的話)。
元素
元素 | 描述 | 必要 |
---|---|---|
當… | 一或多個指定 choose 原則 if 或 ifelse 部分的元素。 如果指定了多個 when 元素,則會循序進行評估。 一旦 when 元素的 condition 評估為 true 後,就不會再評估後面的 when 條件。 |
Yes |
otherwise | 若沒有任何 when 條件評估為 true 時,所要評估的原則片段。 |
No |
when 屬性
屬性 | 描述 | 必要 |
---|---|---|
條件 | 包含 when 的原則陳述式受評估時,須評估的布林運算式或布林常數。 |
Yes |
使用方式
範例
根據使用者代理程式修改要求與回應
下列範例會示範 set-variable 原則和兩個控制流程原則。
設定變數原則位於 inbound 區段中,並且會在 User-Agent
要求標頭包含文字 iPad
或 iPhone
時,建立設為 true 的 isMobile
布林內容變數。
第一個控制流程原則也位於 inbound 區段中,並且會按照條件,根據 isMobile
內容變數的值套用兩個設定查詢字串參數原則的其中一個。
第二個控制流程原則位於 outbound 區段中,並且會按照條件,在 isMobile
設為 true
時套用將 XML 轉換為 JSON 原則。
<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>
根據產品名稱修改回應
這個範例示範如何在使用 Starter
產品時,移除「從後端服務收到的回應」中的資料元素,藉此執行內容篩選。 範例後端回應包含類似 OpenWeather One 呼叫 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>
相關原則
相關內容
如需使用原則的詳細資訊,請參閱:
- 教學課程:轉換及保護 API
- 原則參考,取得原則陳述式及其設定的完整清單
- 原則運算式
- 設定或編輯原則
- 重複使用原則設定
- 原則程式碼片段存放庫 (英文)
- Azure API 管理 原則工具組
- 使用 Microsoft Azure Copilot 撰寫原則