Omvandlingsprinciper för API Management
Det här avsnittet innehåller en referens för följande API Management principer. Information om hur du lägger till och konfigurerar principer finns i Principer i API Management.
Transformeringsprinciper
Konvertera JSON till XML – Konverterar begäran eller svarstext från JSON till XML.
Konvertera XML till JSON – Konverterar begäran eller svarstext från XML till JSON.
Hitta och ersätt sträng i brödtext – Söker efter en understräng för begäran eller svar och ersätter den med en annan delsträng.
Maskera URL:er i innehåll – Åter skrivningar (maskerar) länkar i svarstexten så att de pekar på motsvarande länk via gatewayen.
Ange servertjänst – Ändrar servertjänst för en inkommande begäran.
Ange brödtext – Anger meddelandetexten för inkommande och utgående begäranden.
Ange HTTP-huvud – Tilldelar ett värde till ett befintligt svar och/eller begärandehuvud eller lägger till ett nytt svar och/eller begärandehuvud.
Ange frågesträngsparameter – Lägger till, ersätter värdet för eller tar bort frågesträngsparametern för begäran.
Omskrivnings-URL – Konverterar en begärande-URL från dess offentliga formulär till det formulär som förväntas av webbtjänsten.
Transformera XML med hjälp av en XSLT – Tillämpar en XSL-transformering på XML i begäran eller svarstexten.
Konvertera JSON till XML
Principen json-to-xml konverterar en begäran eller svarstext från JSON till XML.
Principutdrag
<json-to-xml apply="always | content-type-json" consider-accept-header="true | false" parse-date="true | false"/>
Exempel
<policies>
<inbound>
<base />
</inbound>
<outbound>
<base />
<json-to-xml apply="always" consider-accept-header="false" parse-date="false"/>
</outbound>
</policies>
Element
| Namn | Beskrivning | Krävs |
|---|---|---|
| json-to-xml | Rotelementet. | Yes |
Attribut
| Name | Beskrivning | Krävs | Standardvärde |
|---|---|---|---|
| apply | Attributet måste anges till något av följande värden. - alltid – tillämpa alltid konvertering. – content-type-json – konvertera endast om svaret Content-Type-huvud indikerar förekomst av JSON. |
Yes | Ej tillämpligt |
| consider-accept-header | Attributet måste anges till något av följande värden. - true – tillämpa konvertering om XML begärs i begärans accept-huvud. - false – tillämpa alltid konvertering. |
No | true |
| parse-date | När det är false inställt på datumvärden kopieras de helt enkelt under omvandlingen |
No | true |
Användning
Den här principen kan användas i följande principavsnitt och omfång.
Principavsnitt: inkommande, utgående, vid fel
Principomfång: alla omfång
Konvertera XML till JSON
Principen xml-to-json konverterar en begäran eller svarstext från XML till JSON. Den här principen kan användas för att modernisera API:er baserat på XML-baserade backend-webbtjänster.
Principutdrag
<xml-to-json kind="javascript-friendly | direct" apply="always | content-type-xml" consider-accept-header="true | false"/>
Exempel
<policies>
<inbound>
<base />
</inbound>
<outbound>
<base />
<xml-to-json kind="direct" apply="always" consider-accept-header="false" />
</outbound>
</policies>
Element
| Namn | Beskrivning | Krävs |
|---|---|---|
| xml-to-json | Rotelementet. | Yes |
Attribut
| Name | Beskrivning | Krävs | Standardvärde |
|---|---|---|---|
| Typ | Attributet måste anges till något av följande värden. – javascript-vänligt – den konverterade JSON-filen har ett formulär som är användarvänligt för JavaScript-utvecklare. – direkt – den konverterade JSON-filen återspeglar det ursprungliga XML-dokumentets struktur. |
Yes | Ej tillämpligt |
| apply | Attributet måste anges till något av följande värden. – alltid – konvertera alltid. – content-type-xml – konvertera endast om svaret Content-Type-rubrik indikerar förekomst av XML. |
Yes | Ej tillämpligt |
| consider-accept-header | Attributet måste anges till något av följande värden. – sant – tillämpa konvertering om JSON begärs i begärans accept-huvud. - false – tillämpa alltid konvertering. |
No | true |
Användning
Den här principen kan användas i följande principavsnitt och omfång.
Principavsnitt: inkommande, utgående, vid fel
Principomfång: alla omfång
Hitta och ersätta sträng i brödtext
Principen find-and-replace hittar en understräng för begäran eller svar och ersätter den med en annan delsträng.
Principutdrag
<find-and-replace from="what to replace" to="replacement" />
Exempel
<find-and-replace from="notebook" to="laptop" />
Element
| Namn | Beskrivning | Krävs |
|---|---|---|
| find-and-replace | Rotelementet. | Yes |
Attribut
| Name | Beskrivning | Krävs | Standardvärde |
|---|---|---|---|
| Från | Strängen att söka efter. | Yes | Ej tillämpligt |
| på | Ersättningssträngen. Ange en ersättningssträng utan längd för att ta bort söksträngen. | Yes | Ej tillämpligt |
Användning
Den här principen kan användas i följande principavsnitt och omfång.
Principavsnitt: inkommande, utgående, backend, vid fel
Principomfång: alla omfång
Maskera URL:er i innehåll
Principen redirect-content-urls skriver om (maskerar) länkar i svarstexten så att de pekar på motsvarande länk via gatewayen. Använd i avsnittet utgående för att skriva om svarstextlänkar så att de pekar på gatewayen. Använd i avsnittet inkommande för en motsatt effekt.
Anteckning
Den här principen ändrar inte några huvudvärden, till Location exempel rubriker. Om du vill ändra rubrikvärden använder du principen set-header.
Principutdrag
<redirect-content-urls />
Exempel
<redirect-content-urls />
Element
| Namn | Beskrivning | Krävs |
|---|---|---|
| redirect-content-urls | Rotelementet. | Yes |
Användning
Den här principen kan användas i följande principavsnitt och omfång.
Principavsnitt: inkommande, utgående
Principomfång: alla omfång
Ange backend-tjänst
Använd principen set-backend-service för att omdirigera en inkommande begäran till en annan server än den som anges i API-inställningarna för åtgärden. Den här principen ändrar serverdelstjänstens bas-URL för den inkommande begäran till den som anges i principen.
Principutdrag
<set-backend-service base-url="base URL of the backend service" />
eller
<set-backend-service backend-id="identifier of the backend entity specifying base URL of the backend service" />
Anteckning
Backend-entiteter kan hanteras via Azure Portal, hanterings-APIoch PowerShell.
Exempel
<policies>
<inbound>
<choose>
<when condition="@(context.Request.Url.Query.GetValueOrDefault("version") == "2013-05")">
<set-backend-service base-url="http://contoso.com/api/8.2/" />
</when>
<when condition="@(context.Request.Url.Query.GetValueOrDefault("version") == "2014-03")">
<set-backend-service base-url="http://contoso.com/api/9.1/" />
</when>
</choose>
<base />
</inbound>
<outbound>
<base />
</outbound>
</policies>
I det här exemplet dirigerar den angivna principen för backend-tjänsten begäranden baserat på versionsvärdet som skickas i frågesträngen till en annan backend-tjänst än den som anges i API:et.
Ursprungligen härleds bas-URL:en för backend-tjänsten från API-inställningarna. Så url:en https://contoso.azure-api.net/api/partners/15?version=2013-05&subscription-key=abcdef för begäran blir där är den url för http://contoso.com/api/10.4/partners/15?version=2013-05&subscription-key=abcdef http://contoso.com/api/10.4/ backend-tjänsten som anges i API-inställningarna.
När <> väljer principsatsen tillämpas kan den grundläggande URL:en för backend-tjänsten ändras antingen till eller , beroende på värdet för frågeparametern för http://contoso.com/api/8.2 http://contoso.com/api/9.1 versionsbegäran. Om värdet till exempel är den slutliga "2013-15" begärande-URL:en blir http://contoso.com/api/8.2/partners/15?version=2013-05&subscription-key=abcdef .
Om ytterligare omvandling av begäran önskas kan andra transformeringsprinciper användas. Om du till exempel vill ta bort frågeparametern för versionen nu när begäran dirigeras till en versionsspecifik backend kan du använda principen Ange frågesträngsparameter för att ta bort attributet för den nu redundanta versionen.
Exempel
<policies>
<inbound>
<set-backend-service backend-id="my-sf-service" sf-partition-key="@(context.Request.Url.Query.GetValueOrDefault("userId","")" sf-replica-type="primary" />
</inbound>
<outbound>
<base />
</outbound>
</policies>
I det här exemplet dirigerar principen begäran till en Service Fabric-backend med hjälp av userId-frågesträngen som partitionsnyckel och använder den primära repliken av partitionen.
Element
| Namn | Beskrivning | Krävs |
|---|---|---|
| set-backend-service | Rotelementet. | Yes |
Attribut
| Name | Beskrivning | Krävs | Standardvärde |
|---|---|---|---|
| base-url | Ny bas-URL för backend-tjänsten. | En av base-url eller backend-id måste finnas. |
Ej tillämpligt |
| backend-id | Identifierare för den backend som vägen ska dirigeras till. (Backend-entiteter hanteras via Azure Portal, APIoch PowerShell.) | En av base-url eller backend-id måste finnas. |
Ej tillämpligt |
| sf-partition-key | Gäller endast när backend är en Service Fabric tjänst och anges med hjälp av "backend-id". Används för att lösa en specifik partition från namnmatchningstjänsten. | No | Ej tillämpligt |
| sf-replica-type | Gäller endast när backend är en Service Fabric tjänst och anges med hjälp av "backend-id". Styr om begäran ska gå till den primära eller sekundära repliken av en partition. | No | Ej tillämpligt |
| sf-resolve-condition | Gäller endast när backend är en Service Fabric tjänst. Villkor som identifierar om anropet till Service Fabric-backend måste upprepas med en ny lösning. | No | Ej tillämpligt |
| sf-service-instance-name | Gäller endast när backend är en Service Fabric tjänst. Tillåter att tjänstinstanser ändras vid körning. | No | Ej tillämpligt |
| sf-listener-name | Gäller endast när backend är en Service Fabric tjänst och anges med hjälp av "backend-id". Service Fabric Reliable Services kan du skapa flera lyssnare i en tjänst. Det här attributet används för att välja en specifik lyssnare när en Reliable Service i backend har fler än en lyssnare. Om det här attributet inte API Management försöker använda en lyssnare utan ett namn. En lyssnare utan namn är typisk för Reliable Services som bara har en lyssnare. | No | Ej tillämpligt |
Användning
Den här principen kan användas i följande principavsnitt och omfång.
Principavsnitt: inkommande, backend
Principomfång: alla omfång
Ange brödtext
Använd principen set-body för att ange meddelandetexten för inkommande och utgående begäranden. Om du vill komma åt meddelandetexten kan du använda egenskapen eller , beroende på om principen finns i context.Request.Body context.Response.Body avsnittet inkommande eller utgående.
Viktigt
Observera att som standard när du kommer åt meddelandetexten med hjälp av eller så går den ursprungliga meddelandetexten förlorad och måste anges genom att brödtexten context.Request.Body context.Response.Body returneras i uttrycket. Om du vill bevara innehållet i brödtexten anger preserveContent du true parametern till när du kommer åt meddelandet. Om preserveContent är inställt true på och en annan brödtext returneras av uttrycket används den returnerade brödtexten.
Tänk på följande när du använder set-body principen.
- Om du använder principen för att returnera en ny eller uppdaterad brödtext behöver du inte ange till eftersom du uttryckligen anger
set-bodypreserveContentdet nyatruebrödtextinnehållet.- Att bevara innehållet i ett svar i den inkommande pipelinen är inte meningsfullt eftersom det inte finns något svar ännu.
- Det är inte meningsfullt att bevara innehållet i en begäran i den utgående pipelinen eftersom begäran redan har skickats till backend i det här läget.
- Om den här principen används när det inte finns någon meddelandetext, till exempel i en inkommande GET, utlöstes ett undantag.
Mer information finns i context.Request.Body avsnitten context.Response.Body , och i IMessage tabellen Kontextvariabel.
Principutdrag
<set-body>new body value as text</set-body>
Exempel
Exempel på literal text
<set-body>Hello world!</set-body>
Exempel på hur du kommer åt brödtexten som en sträng. Observera att vi bevarar den ursprungliga begärandetexten så att vi kan komma åt den senare i pipelinen.
<set-body>
@{
string inBody = context.Request.Body.As<string>(preserveContent: true);
if (inBody[0] =='c') {
inBody[0] = 'm';
}
return inBody;
}
</set-body>
Exempel på åtkomst till brödtexten som ett JObject. Observera att eftersom vi inte reserverar den ursprungliga begärandetexten resulterar åtkomst till den senare i pipelinen i ett undantag.
<set-body>
@{
JObject inBody = context.Request.Body.As<JObject>();
if (inBody.attribute == <tag>) {
inBody[0] = 'm';
}
return inBody.ToString();
}
</set-body>
Filtrera svar baserat på produkt
Det här exemplet visar hur du utför innehållsfiltrering genom att ta bort dataelement från svaret från backend-tjänsten när du använder Starter produkten. En demonstration av hur du konfigurerar och använder den här principen finns i Cloud CoverAvsnitt 177: Fler API Management-funktioner med Vlad Vinogradsky och fast-forward till 34:30. Börja kl. 31:50 för att se en översikt över DARK Sky Forecast-API:et som används för den här demonstrationen.
<!-- 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 api 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 [] {"minutely", "hourly", "daily", "flags"}) {
response.Property (key).Remove ();
}
return response.ToString();
}
</set-body>
</when>
</choose>
Använda Liquid-mallar med uppsättningstext
Principen set-body kan konfigureras att använda mallspråket Liquid för att transformera brödtexten i en begäran eller ett svar. Detta kan vara mycket effektivt om du behöver omforma formatet för ditt meddelande helt.
Viktigt
Implementeringen av Liquid som används i set-body principen konfigureras i "C#-läge". Detta är särskilt viktigt när du gör saker som filtrering. Till exempel kräver användning av ett datumfilter användning av Pascal-hölje och C#-datumformatering, t.ex.:
{{body.foo.startDateTime| Datum:"yyyyMMddTHH:mm:ssZ"}}
Viktigt
För att korrekt binda till en XML-brödtext med hjälp av mallen Liquid använder du en princip för att ange Content-Type till antingen application/xml, text/xml (eller någon typ som slutar med +xml). För en JSON-brödtext måste det vara set-header application/json, text/json (eller någon typ som slutar med +json).
Konvertera JSON till SOAP med hjälp av en Liquid-mall
<set-body template="liquid">
<soap:Envelope xmlns="http://tempuri.org/" xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
<soap:Body>
<GetOpenOrders>
<cust>{{body.getOpenOrders.cust}}</cust>
</GetOpenOrders>
</soap:Body>
</soap:Envelope>
</set-body>
Transformera JSON med en Liquid-mall
{
"order": {
"id": "{{body.customer.purchase.identifier}}",
"summary": "{{body.customer.purchase.orderShortDesc}}"
}
}
Element
| Namn | Beskrivning | Krävs |
|---|---|---|
| set-body | Rotelementet. Innehåller brödtexten eller ett uttryck som returnerar en brödtext. | Yes |
Egenskaper
| Name | Beskrivning | Krävs | Standardvärde |
|---|---|---|---|
| mall | Används för att ändra mallläget som den konfigurerade brödtextprincipen ska köras i. För närvarande är det enda värde som stöds: – liquid – den inställda brödtextprincipen använder flytande mallmotor |
No |
Mallen Liquid kan binda till ett kontextobjekt med följande egenskaper för att komma åt information om begäran och svaret:
context.
Request.
Url
Method
OriginalMethod
OriginalUrl
IpAddress
MatchedParameters
HasBody
ClientCertificates
Headers
Response.
StatusCode
Method
Headers
Url.
Scheme
Host
Port
Path
Query
QueryString
ToUri
ToString
OriginalUrl.
Scheme
Host
Port
Path
Query
QueryString
ToUri
ToString
Användning
Den här principen kan användas i följande principavsnitt och omfång.
Principavsnitt: inkommande, utgående, backend
Principomfång: alla omfång
Ange HTTP-huvud
Principen set-header tilldelar ett värde till ett befintligt svar och/eller begärandehuvud eller lägger till ett nytt svars- och/eller begärandehuvud.
Infogar en lista med HTTP-huvuden i ett HTTP-meddelande. När den placeras i en inkommande pipeline anger den här principen HTTP-huvudena för begäran som skickas till måltjänsten. När den placeras i en utgående pipeline anger den här principen HTTP-huvudena för svaret som skickas till gatewayens klient.
Principutdrag
<set-header name="header name" exists-action="override | skip | append | delete">
<value>value</value> <!--for multiple headers with the same name add additional value elements-->
</set-header>
Exempel
Exempel – lägga till rubrik, åsidosätt befintlig
<set-header name="some header name" exists-action="override">
<value>20</value>
</set-header>
Exempel – ta bort sidhuvud
<set-header name="some header name" exists-action="delete" />
Vidarebefordra kontextinformation till backend-tjänsten
Det här exemplet visar hur du tillämpar en princip på API-nivå för att ange kontextinformation till backend-tjänsten. En demonstration av hur du konfigurerar och använder den här principen finns i Cloud CoverAvsnitt 177: Fler API Management-funktioner med Vlad Vinogradsky och fast-forward till 10:30. Kl. 12:10 finns en demonstration av hur du anropar en åtgärd i utvecklarportalen där du kan se principen på jobbet.
<!-- Copy this snippet into the inbound element to forward some context information, user id and the region the gateway is hosted in, to the backend service for logging or evaluation -->
<set-header name="x-request-context-data" exists-action="override">
<value>@(context.User.Id)</value>
<value>@(context.Deployment.Region)</value>
</set-header>
Mer information finns i Principuttryck och Kontextvariabel.
Anteckning
Flera värden i en rubrik sammanfogas till en CSV-sträng, till exempel: headerName: value1,value2,value3
Undantag omfattar standardiserade huvuden, vilka värden:
- kan innehålla kommatecken (
User-Agent,WWW-Authenticate,Proxy-Authenticate), - kan innehålla datum (
Cookie,Set-Cookie,Warning), - contain date (
Date, , , , ,ExpiresIf-Modified-SinceIf-Unmodified-SinceLast-ModifiedRetry-After).
Om det gäller dessa undantag sammanfogas inte flera huvudvärden till en sträng och skickas som separata huvuden, till exempel: User-Agent: value1
User-Agent: value2
User-Agent: value3
Element
| Namn | Beskrivning | Krävs |
|---|---|---|
| set-header | Rotelementet. | Yes |
| värde | Anger värdet för huvudet som ska ställas in. Lägg till ytterligare element för flera rubriker med samma value namn. |
No |
Egenskaper
| Name | Beskrivning | Krävs | Standardvärde |
|---|---|---|---|
| exists-action | Anger vilken åtgärd som ska vidtas när rubriken redan har angetts. Det här attributet måste ha något av följande värden. – åsidosättning – ersätter värdet för det befintliga huvudet. – hoppa över – ersätter inte det befintliga rubrikvärdet. - append – lägger till värdet i det befintliga rubrikvärdet. – ta bort – tar bort -huvudet från begäran. När det här är inställt på att registrera flera poster med samma namn resulterar det i att rubriken anges enligt alla poster (som visas flera gånger). Endast listade värden anges i override resultatet. |
No | Åsidosätta |
| name | Anger namnet på rubriken som ska anges. | Yes | Ej tillämpligt |
Användning
Den här principen kan användas i följande principavsnitt och omfång.
Principavsnitt: inkommande, utgående, backend, on-error
Principomfång: alla omfång
Ange frågesträngsparameter
Principen set-query-parameter lägger till, ersätter värdet för eller tar bort frågesträngparametern för förfrågningar. Kan användas för att skicka frågeparametrar som förväntas av backend-tjänsten som är valfria eller aldrig finns i begäran.
Principsats
<set-query-parameter name="param name" exists-action="override | skip | append | delete">
<value>value</value> <!--for multiple parameters with the same name add additional value elements-->
</set-query-parameter>
Exempel
<set-query-parameter name="api-key" exists-action="skip">
<value>12345678901</value>
</set-query-parameter>
Vidarebefordra kontextinformation till backend-tjänsten
Det här exemplet visar hur du tillämpar en princip på API-nivå för att ange kontextinformation till backend-tjänsten. En demonstration av hur du konfigurerar och använder den här principen finns i Cloud CoverAvsnitt 177: Fler API Management-funktioner med Vlad Vinogradsky och fast-forward till 10:30. Kl. 12:10 finns det en demonstration av att anropa en åtgärd i utvecklarportalen där du kan se principen på jobbet.
<!-- Copy this snippet into the inbound element to forward a piece of context, product name in this example, to the backend service for logging or evaluation -->
<set-query-parameter name="x-product-name" exists-action="override">
<value>@(context.Product.Name)</value>
</set-query-parameter>
Mer information finns i Principuttryck och Kontextvariabel.
Element
| Namn | Beskrivning | Krävs |
|---|---|---|
| set-query-parameter | Rotelementet. | Yes |
| värde | Anger värdet på frågeparametern som ska ställas in. För flera frågeparametrar med samma namn lägger du till ytterligare value element. |
Yes |
Egenskaper
| Name | Beskrivning | Krävs | Standardvärde |
|---|---|---|---|
| exists-action | Anger vilken åtgärd som ska vidtas när frågeparametern redan är angiven. Det här attributet måste ha något av följande värden. – åsidosättning – ersätter värdet för den befintliga parametern. – hoppa över – ersätter inte det befintliga frågeparametervärdet. - append – lägger till värdet i det befintliga frågeparametervärdet. – ta bort – tar bort frågeparametern från begäran. När värdet är inställt på att lista flera poster med samma namn resulterar det i att frågeparametern anges enligt alla poster (som visas flera gånger). Endast listade värden anges i override resultatet. |
No | Åsidosätta |
| name | Anger namnet på frågeparametern som ska anges. | Yes | Ej tillämpligt |
Användning
Den här principen kan användas i följande principavsnitt och omfång.
Principavsnitt: inkommande, backend
Principomfång: alla omfång
Skriva om URL
Principen konverterar en begärande-URL från dess offentliga formulär till det formulär som förväntas av rewrite-uri webbtjänsten, som du ser i följande exempel.
Offentlig URL –
http://api.example.com/storenumber/ordernumberBegärande-URL –
http://api.example.com/v2/US/hardware/storenumber&ordernumber?City&StateDen här principen kan användas när en mänsklig och/eller webbläsarvänlig URL ska omvandlas till det URL-format som förväntas av webbtjänsten. Den här principen behöver bara tillämpas när du exponerar ett alternativt URL-format, till exempel rena URL:er, RESTful-URL:er, användarvänliga URL:er eller SEO-användarvänliga URL:er som är rent strukturella URL:er som inte innehåller en frågesträng och i stället bara innehåller resursens sökväg (efter schemat och behörigheten). Detta görs ofta för estetiskt syfte, användbarhet eller sökmotoroptimering (SEO).
Anteckning
Du kan bara lägga till frågesträngsparametrar med hjälp av principen. Du kan inte lägga till extra parametrar för mallsökvägen i omskrivnings-URL:en.
Principsats
<rewrite-uri template="uri template" copy-unmatched-params="true | false" />
Exempel
<policies>
<inbound>
<base />
<rewrite-uri template="/v2/US/hardware/{storenumber}&{ordernumber}?City=city&State=state" />
</inbound>
<outbound>
<base />
</outbound>
</policies>
<!-- Assuming incoming request is /get?a=b&c=d and operation template is set to /get?a={b} -->
<policies>
<inbound>
<base />
<rewrite-uri template="/put" />
</inbound>
<outbound>
<base />
</outbound>
</policies>
<!-- Resulting URL will be /put?c=d -->
<!-- Assuming incoming request is /get?a=b&c=d and operation template is set to /get?a={b} -->
<policies>
<inbound>
<base />
<rewrite-uri template="/put" copy-unmatched-params="false" />
</inbound>
<outbound>
<base />
</outbound>
</policies>
<!-- Resulting URL will be /put -->
Element
| Namn | Beskrivning | Krävs |
|---|---|---|
| rewrite-uri | Rotelementet. | Yes |
Attribut
| Attribut | Beskrivning | Krävs | Standardvärde |
|---|---|---|---|
| mall | Den faktiska webbtjänst-URL:en med eventuella frågesträngsparametrar. När du använder uttryck måste hela värdet vara ett uttryck. | Yes | Ej tillämpligt |
| copy-unmatched-params | Anger om frågeparametrar i den inkommande begäran som inte finns i den ursprungliga URL-mallen läggs till i den URL som definieras av mallen för omskrivning | No | true |
Användning
Den här principen kan användas i följande principavsnitt och omfång.
Principavsnitt: inkommande
Principomfång: alla omfång
Transformera XML med hjälp av en XSLT
Principen Transform XML using an XSLT tillämpar en XSL-transformering på XML i begäran eller svarstexten.
Principutdrag
<xsl-transform>
<parameter name="User-Agent">@(context.Request.Headers.GetValueOrDefault("User-Agent","non-specified"))</parameter>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" indent="yes" />
<xsl:param name="User-Agent" />
<xsl:template match="* | @* | node()">
<xsl:copy>
<xsl:if test="self::* and not(parent::*)">
<xsl:attribute name="User-Agent">
<xsl:value-of select="$User-Agent" />
</xsl:attribute>
</xsl:if>
<xsl:apply-templates select="* | @* | node()" />
</xsl:copy>
</xsl:template>
</xsl:stylesheet>
</xsl-transform>
Exempel
<policies>
<inbound>
<base />
</inbound>
<outbound>
<base />
<xsl-transform>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output omit-xml-declaration="yes" method="xml" indent="yes" />
<!-- Copy all nodes directly-->
<xsl:template match="node()| @*|*">
<xsl:copy>
<xsl:apply-templates select="@* | node()|*" />
</xsl:copy>
</xsl:template>
</xsl:stylesheet>
</xsl-transform>
</outbound>
</policies>
Element
| Namn | Beskrivning | Krävs |
|---|---|---|
| xsl-transform | Rotelementet. | Yes |
| parameter | Används för att definiera variabler som används i transformeringen | No |
| xsl:stylesheet | Rotformatmallelement. Alla element och attribut som definieras i följer XSLT-standardspecifikationen | Yes |
Användning
Den här principen kan användas i följande principavsnitt och omfång.
Principavsnitt: inkommande, utgående
Principomfång: alla omfång
Nästa steg
Mer information finns i följande avsnitt:
- Principer i API Management
- Principreferens för en fullständig lista över principutdrag och deras inställningar
- Principexempel