Ange brödtext
GÄLLER FÖR: Alla API Management-nivåer
set-body
Använd principen för att ange meddelandetexten för en begäran eller ett svar. För att komma åt meddelandetexten context.Request.Body
kan du använda egenskapen eller context.Response.Body
, beroende på om principen finns i avsnittet inkommande eller utgående.
Viktigt!
Som standard när du kommer åt meddelandetexten med eller context.Request.Body
context.Response.Body
går den ursprungliga meddelandetexten förlorad och måste anges genom att brödtexten returneras i uttrycket igen. Om du vill bevara brödtextinnehållet anger du parametern preserveContent
till true
när du kommer åt meddelandet. Om preserveContent
anges till true
och en annan brödtext returneras av uttrycket används den returnerade brödtexten.
Kommentar
Ange principens element och underordnade element i den ordning som anges i principbeskrivningen. Läs mer om hur du anger eller redigerar API Management-principer.
Principuttryck
<set-body template="liquid" xsi-nil="blank | null" parse-date="true | false">
new body value as text
</set-body>
Attribut
Attribut | beskrivning | Obligatoriskt | Standardvärde |
---|---|---|---|
mall | Används för att ändra det mallläge som set-body principen körs i. För närvarande är det enda värde som stöds:- liquid - Principen set-body kommer att använda motorn för flytande templating |
Nej | Ej tillämpligt |
xsi-nil | Används för att styra hur element som markerats med xsi:nil="true" representeras i XML-nyttolaster. Ange till något av följande värden:- blank - nil representeras med en tom sträng.- null - nil representeras med ett null-värde.Principuttryck tillåts inte. |
Nej | blank |
parsningsdatum | Boolesk. Anger om datumformaterade strängar (till exempel "/Date(1198908717056)/" , "2012-03-21T05:40Z" ) parsas till System.DateTime (mm/dd/yyyy hh:mm:ss ). När värdet är inställt på false kopieras bara datumvärden.Principuttryck tillåts inte. |
Nej | true |
För åtkomst till information om begäran och svar kan Liquid-mallen binda till ett kontextobjekt med följande egenskaper:
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
- Principavsnitt: inkommande, utgående, serverdel
- Principomfattningar: global, arbetsyta, produkt, API, åtgärd
- Gatewayer: klassisk, v2, förbrukning, lokalt installerad, arbetsyta
Användningsanteckningar
- Om du använder
set-body
principen för att returnera en ny eller uppdaterad brödtext behöver du inte angepreserveContent
tilltrue
eftersom du uttryckligen anger det nya brödtextinnehållet. - Att bevara innehållet i ett svar i den inkommande pipelinen är inte meningsfullt eftersom det inte finns något svar ännu.
- Att bevara innehållet i en begäran i den utgående pipelinen är inte meningsfullt eftersom begäran redan har skickats till serverdelen i det här läget.
- Om den här principen används när det inte finns någon meddelandetext, till exempel i ett inkommande
GET
, genereras ett undantag.
Mer information finns i avsnitten context.Request.Body
IMessageBody
, context.Response.Body
och i tabellen Sammanhangsvariabel.
Använda Liquid-mallar med set-body
Principen set-body
kan konfigureras för att använda språket liquid templating för att transformera brödtexten för en begäran eller ett svar. Detta kan vara effektivt om du behöver omforma meddelandets format 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:"åååååMMddTHH:mm:ssZ"}}
Viktigt!
Om du vill binda till en XML-brödtext med hjälp av Liquid-mallen använder du en set-header
princip för att ange Innehållstyp till antingen program/xml, text/xml (eller någon typ som slutar med +xml). För en JSON-brödtext måste den vara application/json, text/json (eller någon typ som slutar med +json).
Viktigt!
Flytande mallar använder begäran/svarstexten i den aktuella körningspipelinen som indata. Därför fungerar inte flytande mallar när de används i en retursvarsprincip. En retursvarsprincip avbryter den aktuella körningspipelinen och tar bort begäran/svarstexten. Därför får alla flytande mallar som används i retursvaret en tom sträng som indata och kommer inte att generera förväntade utdata.
Flytande filter som stöds
Följande Liquid-filter stöds i set-body
principen. Filterexempel finns i liquid-dokumentationen.
Kommentar
Principen kräver Pascal-hölje för flytande filternamn (till exempel "AtLeast" i stället för "at_least").
- Abs
- Lägga till
- AtLeast
- Längst upp
- Kapitalisera
- Compact
- Valuta
- Date
- Standardvärde
- DividedBy
- Nedfall
- Esc
- First
- H
- Anslut
- Last
- Lstrip
- Mappning
- Minus
- Modulo
- NewlineToBr
- Plustecken
- Owner
- Ta bort
- RemoveFirst
- Replace
- ReplaceFirst
- Avrunda
- Rstrip
- Storlek
- Sektor
- Sortera
- Delad
- Remsa
- StripHtml
- StripNya streck
- Times
- Truncate
- Trunkeraord
- Uniq
- Upcase
- UrlDecode
- UrlEncode
Exempel
Literal text
<set-body>Hello world!</set-body>
Komma åt brödtexten som en sträng
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>
Komma åt brödtexten som en JObject
Eftersom vi inte reserverar den ursprungliga begärandetexten resulterar det i ett undantag när vi kommer åt den senare i pipelinen.
<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 som tas emot från en serverdelstjänst när du Starter
använder produkten. Exempelserverdelssvaret innehåller egenskaper på rotnivå som liknar API:et för OpenWeather One Call.
<!-- 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>
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 hjälp av en Liquid-mall
<set-body template="liquid">
{
"order": {
"id": "{{body.customer.purchase.identifier}}",
"summary": "{{body.customer.purchase.orderShortDesc}}"
}
}
</set-body>
Komma åt brödtexten som URL-kodade formulärdata
I följande exempel används AsFormUrlEncodedContent()
uttrycket för att komma åt begärandetexten som URL-kodade formulärdata (innehållstyp application/x-www-form-urlencoded
) och konverterar det sedan till JSON. Eftersom vi inte reserverar den ursprungliga begärandetexten resulterar det i ett undantag när vi kommer åt den senare i pipelinen.
<set-body>
@{
var inBody = context.Request.Body.AsFormUrlEncodedContent();
return JsonConvert.SerializeObject(inBody);
}
</set-body>
Få åtkomst till och returnera brödtext som URL-kodade formulärdata
I följande exempel används AsFormUrlEncodedContent()
uttrycket för att komma åt begärandetexten som URL-kodade formulärdata (innehållstyp application/x-www-form-urlencoded
), lägger till data i nyttolasten och returnerar URL-kodade formulärdata. Eftersom vi inte reserverar den ursprungliga begärandetexten resulterar det i ett undantag när vi kommer åt den senare i pipelinen.
<set-body>
@{
var body = context.Request.Body.AsFormUrlEncodedContent();
body["newKey"].Add("newValue");
return body.ToFormUrlEncodedContent();
}
</set-body>
Relaterade principer
Relaterat innehåll
Mer information om hur du arbetar med principer finns i:
- Självstudie: Transformera och skydda ditt API
- Principreferens för en fullständig lista över principinstruktioner och deras inställningar
- Principuttryck
- Ange eller redigera principer
- Återanvända principkonfigurationer
- Lagringsplats för principfragment
- Skapa principer med Microsoft Copilot i Azure