Hoofdtekst instellen
VAN TOEPASSING OP: Alle API Management-lagen
Gebruik het set-body
beleid om de berichttekst in te stellen voor een aanvraag of antwoord. Voor toegang tot de hoofdtekst van het bericht kunt u de context.Request.Body
eigenschap of de context.Response.Body
eigenschap gebruiken, afhankelijk van of het beleid zich in de binnenkomende of uitgaande sectie bevindt.
Belangrijk
Wanneer u de hoofdtekst context.Request.Body
van het bericht gebruikt of context.Response.Body
, gaat de oorspronkelijke berichttekst standaard verloren en moet deze worden ingesteld door de hoofdtekst terug te sturen in de expressie. Als u de hoofdtekstinhoud wilt behouden, stelt u de preserveContent
parameter true
in op bij het openen van het bericht. Als preserveContent
deze is ingesteld true
op en een andere hoofdtekst wordt geretourneerd door de expressie, wordt de geretourneerde hoofdtekst gebruikt.
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
<set-body template="liquid" xsi-nil="blank | null" parse-date="true | false">
new body value as text
</set-body>
Kenmerken
Kenmerk | Beschrijving | Vereist | Standaardinstelling |
---|---|---|---|
sjabloon | Wordt gebruikt om de tijdelijke modus te wijzigen waarin het set-body beleid wordt uitgevoerd. Momenteel is de enige ondersteunde waarde:- liquid - het set-body beleid zal de vloeistofverleidingsmotor gebruiken |
Nee | N.v.t. |
xsi-nil | Wordt gebruikt om te bepalen hoe elementen die zijn gemarkeerd xsi:nil="true" , worden weergegeven in XML-nettoladingen. Ingesteld op een van de volgende waarden:- blank - nil wordt weergegeven met een lege tekenreeks.- null - nil wordt weergegeven met een null-waarde.Beleidsexpressies zijn niet toegestaan. |
Nee | blank |
parseringsdatum | Booleaans. Hiermee geeft u op of tekenreeksen met datumnotatie (bijvoorbeeld "/Date(1198908717056)/" , "2012-03-21T05:40Z" ) worden geparseerd naar System.DateTime (mm/dd/yyyy hh:mm:ss ). Als deze waarde is ingesteld false , worden datumwaarden gewoon gekopieerd.Beleidsexpressies zijn niet toegestaan. |
Nee | true |
Voor toegang tot informatie over de aanvraag en het antwoord kan de Liquid-sjabloon worden verbonden met een contextobject met de volgende eigenschappen:
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
Gebruik
- Beleidssecties: binnenkomend, uitgaand, back-end
- Beleidsbereik: globaal, werkruimte, product, API, bewerking
- Gateways: klassiek, v2, verbruik, zelf-hostend, werkruimte
Gebruiksnotities
- Als u het
set-body
beleid gebruikt om een nieuwe of bijgewerkte hoofdtekst te retourneren, hoeft u niet in te stellenpreserveContent
true
op omdat u expliciet de nieuwe hoofdtekstinhoud opgeeft. - Het behouden van de inhoud van een antwoord in de binnenkomende pijplijn is niet logisch omdat er nog geen antwoord is.
- Het behouden van de inhoud van een aanvraag in de uitgaande pijplijn is niet logisch omdat de aanvraag op dit moment al naar de back-end is verzonden.
- Als dit beleid wordt gebruikt wanneer er geen berichttekst is, bijvoorbeeld in een inkomend verkeer
GET
, wordt er een uitzondering gegenereerd.
Zie de secties context.Response.Body
in de context.Request.Body
tabel Contextvariabele voor IMessageBody
meer informatie.
Liquid-sjablonen gebruiken met set-body
Het set-body
beleid kan worden geconfigureerd voor het gebruik van de liquid-tempatietaal om de hoofdtekst van een aanvraag of antwoord te transformeren. Dit kan effectief zijn als u de indeling van uw bericht volledig opnieuw moet vormgeven.
Belangrijk
De implementatie van Liquid die in het set-body
beleid wordt gebruikt, wordt geconfigureerd in de C#-modus. Dit is met name belangrijk bij het uitvoeren van dingen zoals filteren. Als voorbeeld vereist het gebruik van een datumfilter het gebruik van Pascal-hoofdlettergebruik en C#-datumopmaak, bijvoorbeeld:
{{body.foo.startDateTime| Datum:"yyyyMMddTHH:mm:ssZ"}}
Belangrijk
Als u een XML-hoofdtekst correct wilt binden met behulp van de Liquid-sjabloon, gebruikt u een set-header
beleid om Inhoudstype in te stellen op toepassing/xml, tekst/xml (of elk type dat eindigt op +xml). Voor een JSON-hoofdtekst moet dit application/json, text/json zijn (of elk type dat eindigt op +json).
Belangrijk
Liquid-sjablonen gebruiken de aanvraag-/antwoordtekst in de huidige uitvoeringspijplijn als invoer. Daarom werken liquide sjablonen niet wanneer ze worden gebruikt binnen een retourresponsbeleid. Een retourantwoordbeleid annuleert de huidige uitvoeringspijplijn en verwijdert de aanvraag-/antwoordtekst. Als gevolg hiervan ontvangt elke vloeistofsjabloon die in het retourantwoord wordt gebruikt, een lege tekenreeks als invoer en wordt de verwachte uitvoer niet geproduceerd.
Ondersteunde liquide filters
De volgende Liquid-filters worden ondersteund in het set-body
beleid. Zie de Liquid-documentatie voor filtervoorbeelden.
Notitie
Voor het beleid is Pascal-casing vereist voor Liquid-filternamen (bijvoorbeeld 'AtLeast' in plaats van 'at_least').
- Abs
- Toevoegen
- AtLeast
- AtMost
- Kapitaliseren
- Compact
- Valuta
- Datum
- Standaardinstelling
- DividedBy
- Kleine letters
- Escape
- First
- H
- Deelnemen
- Last
- Lstrip
- Overzicht
- Min
- Modulo
- NewlineToBr
- Plus
- Prepend
- Verwijderen
- RemoveFirst
- Replace
- ReplaceFirst
- Round
- Rstrip
- Tekengrootte
- Segment
- Sort
- Split
- Strip
- StripHtml
- StripNewlines
- Times
- Truncate
- TruncateWords
- Uniq
- Hoofdletters
- UrlDecode
- UrlEncode
Voorbeelden
Letterlijke tekst
<set-body>Hello world!</set-body>
De hoofdtekst openen als een tekenreeks
We behouden de oorspronkelijke aanvraagbody, zodat we deze later in de pijplijn kunnen openen.
<set-body>
@{
string inBody = context.Request.Body.As<string>(preserveContent: true);
if (inBody[0] =='c') {
inBody[0] = 'm';
}
return inBody;
}
</set-body>
De hoofdtekst openen als een JObject
Omdat we de oorspronkelijke aanvraagbody niet reserveren, resulteert het later openen in de pijplijn in een uitzondering.
<set-body>
@{
JObject inBody = context.Request.Body.As<JObject>();
if (inBody.attribute == <tag>) {
inBody[0] = 'm';
}
return inBody.ToString();
}
</set-body>
Antwoord filteren op basis van product
In dit voorbeeld ziet u hoe u inhoudsfiltering uitvoert door gegevenselementen te verwijderen uit het antwoord dat is ontvangen van een 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>
JSON converteren naar SOAP met behulp van een Liquid-sjabloon
<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>
JSON transformeren met behulp van een Liquid-sjabloon
<set-body template="liquid">
{
"order": {
"id": "{{body.customer.purchase.identifier}}",
"summary": "{{body.customer.purchase.orderShortDesc}}"
}
}
</set-body>
Toegang tot de hoofdtekst als met URL gecodeerde formuliergegevens
In het volgende voorbeeld wordt de AsFormUrlEncodedContent()
expressie gebruikt om toegang te krijgen tot de aanvraagbody als met URL gecodeerde formuliergegevens (inhoudstype application/x-www-form-urlencoded
) en converteert deze vervolgens naar JSON. Omdat we de oorspronkelijke aanvraagbody niet reserveren, resulteert het later openen in de pijplijn in een uitzondering.
<set-body>
@{
var inBody = context.Request.Body.AsFormUrlEncodedContent();
return JsonConvert.SerializeObject(inBody);
}
</set-body>
Hoofdtekst openen en retourneren als met URL gecodeerde formuliergegevens
In het volgende voorbeeld wordt de AsFormUrlEncodedContent()
expressie gebruikt om toegang te krijgen tot de aanvraagbody als door URL gecodeerde formuliergegevens (inhoudstype application/x-www-form-urlencoded
), voegt gegevens toe aan de nettolading en retourneert URL-gecodeerde formuliergegevens. Omdat we de oorspronkelijke aanvraagbody niet reserveren, resulteert het later openen in de pijplijn in een uitzondering.
<set-body>
@{
var body = context.Request.Body.AsFormUrlEncodedContent();
body["newKey"].Add("newValue");
return body.ToFormUrlEncodedContent();
}
</set-body>
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
- Beleid ontwerpen met Behulp van Microsoft Copilot in Azure