Controlestroom
VAN TOEPASSING OP: Alle API Management-lagen
Gebruik het choose
beleid om beleidsinstructies voorwaardelijk toe te passen op basis van de resultaten van de evaluatie van Boole-expressies. Gebruik het beleid voor controlestroom die vergelijkbaar is met een if-then-else of een switchconstructie in een programmeertaal.
Notitie
Stel de elementen en onderliggende elementen van het beleid in de volgorde in die in de beleidsverklaring is opgegeven. Meer informatie over het instellen of bewerken van API Management-beleid.
Beleidsinstructie
<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>
Het choose
beleid moet ten minste één <when/>
element bevatten. Het <otherwise/>
element is optioneel. Voorwaarden in <when/>
elementen worden geëvalueerd in volgorde van hun uiterlijk binnen het beleid. Beleidsinstructie(s) die binnen het eerste <when/>
element met het kenmerk Voorwaarde gelijk true
zijn, worden toegepast. Beleidsregels die zijn opgenomen in het <otherwise/>
element, indien aanwezig, worden toegepast als alle kenmerken van de <when/>
elementvoorwaarde zijn false
.
Elementen
Element | Beschrijving | Vereist |
---|---|---|
Als… | Een of meer elementen die de if of ifelse onderdelen van het choose beleid opgeven. Als er meerdere when elementen zijn opgegeven, worden ze opeenvolgend geëvalueerd. Zodra een condition element wordt geëvalueerd true , worden er geen verdere when voorwaarden geëvalueerd. |
Ja |
anders | Het beleidsfragment dat moet worden geëvalueerd als geen van de when voorwaarden resulteert in true . |
Nee |
wanneer kenmerken
Kenmerk | Beschrijving | Vereist |
---|---|---|
voorwaarde | De Boole-expressie of booleaanse constante die moet worden geëvalueerd wanneer de beleidsinstructie wordt when geëvalueerd. |
Ja |
Gebruik
- Beleidssecties: inkomende, uitgaande, back-end, on-error
- Beleidsbereik: globaal, werkruimte, product, API, bewerking
- Gateways: klassiek, v2, verbruik, zelf-hostend, werkruimte
Voorbeelden
Aanvraag en antwoord wijzigen op basis van gebruikersagent
In het volgende voorbeeld ziet u een setvariabele beleid en twee controlestroombeleidsregels.
Het beleid voor ingestelde variabelen bevindt zich in de binnenkomende sectie en maakt een isMobile
Booleaanse contextvariabele die is ingesteld op waar als de User-Agent
aanvraagheader de tekst iPad
bevat of iPhone
.
Het eerste controlestroombeleid bevindt zich ook in de sectie Inkomend verkeer en past voorwaardelijk een van de twee parameterbeleidsregels voor queryreeksen instellen toe, afhankelijk van de waarde van de isMobile
contextvariabele.
Het tweede controlestroombeleid bevindt zich in de sectie Uitgaand en past voorwaardelijk het xml-bestand converteren naar JSON-beleid toe wanneer isMobile
dit is ingesteld op 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>
Antwoord wijzigen op basis van productnaam
In dit voorbeeld ziet u hoe u inhoudsfiltering uitvoert door gegevenselementen te verwijderen uit het antwoord dat is ontvangen van de back-endservice wanneer u het Starter
product gebruikt. Het voorbeeld van een back-endantwoord bevat eigenschappen op hoofdniveau die vergelijkbaar zijn met de OpenWeather One-aanroep-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>
Gerelateerd beleid
Gerelateerde inhoud
Zie voor meer informatie over het werken met beleid:
- Zelfstudie: Uw API transformeren en beveiligen
- Beleidsreferentie voor een volledige lijst met beleidsinstructies en hun instellingen
- Beleidsexpressies
- Beleid instellen of bewerken
- Beleidsconfiguraties opnieuw gebruiken
- Beleidsfragmentenopslagplaats
- Azure API Management-beleidstoolkit
- Beleid ontwerpen met Behulp van Microsoft Copilot in Azure