Set body (Nastavit text)
PLATÍ PRO: Všechny úrovně služby API Management
set-body
Pomocí zásad nastavte text zprávy pro požadavek nebo odpověď. Pokud chcete získat přístup k textu zprávy, můžete použít context.Request.Body
vlastnost nebo context.Response.Body
v závislosti na tom, jestli je zásada v oddílu příchozí nebo odchozí.
Důležité
Ve výchozím nastavení při přístupu k textu zprávy pomocí context.Request.Body
nebo context.Response.Body
, původní text zprávy je ztracen a musí být nastaven vrácením textu zpět ve výrazu. Chcete-li zachovat základní obsah, nastavte preserveContent
parametr na při přístupu ke true
zprávě. Pokud preserveContent
je nastavená true
hodnota a výraz vrátí jiný text, použije se vrácený text.
Poznámka:
Nastavte prvky zásad a podřízené prvky v pořadí uvedeném v prohlášení o zásadách. Přečtěte si další informace o tom, jak nastavit nebo upravit zásady služby API Management.
Prohlášení o zásadách
<set-body template="liquid" xsi-nil="blank | null" parse-date="true | false">
new body value as text
</set-body>
Atributy
Atribut | Popis | Požaduje se | Výchozí |
---|---|---|---|
šablona | Používá se ke změně režimu šablony, ve kterém zásady set-body běží. V současné době je jediná podporovaná hodnota:- liquid set-body - zásada bude používat modul šablon kapalin |
No | – |
xsi-nil | Slouží k řízení způsobu znázornění prvků označených xsi:nil="true" v datových částech XML. Nastavte jednu z následujících hodnot:- blank - nil je reprezentován prázdným řetězcem.- null - nil je reprezentován hodnotou null.Výrazy zásad nejsou povolené. |
No | blank |
parse-date | Logický. Určuje, "/Date(1198908717056)/" jestli se řetězce formátované datem (například , "2012-03-21T05:40Z" ) analyzují do system.DateTime (mm/dd/yyyy hh:mm:ss ). Pokud je nastavená hodnota false , hodnoty kalendářních dat se jednoduše zkopírují.Výrazy zásad nejsou povolené. |
No | true |
Pro přístup k informacím o požadavku a odpovědi může šablona Liquid vytvořit vazbu na kontextový objekt s následujícími vlastnostmi:
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
Využití
- Oddíly zásad: příchozí, odchozí, back-end
- Obory zásad: globální, pracovní prostor, produkt, rozhraní API, operace
- Brány: Classic, v2, consumption, self-host, workspace
Poznámky k využití
- Pokud zásadu
set-body
používáte k vrácení nového nebo aktualizovaného textu, nemusíte je nastavitpreserveContent
true
, protože explicitně zadáváte nový obsah textu. - Zachování obsahu odpovědi v příchozím kanálu nemá smysl, protože zatím neexistuje žádná odpověď.
- Zachování obsahu požadavku v odchozím kanálu nemá smysl, protože požadavek už byl odeslán do back-endu.
- Pokud se tato zásada použije, pokud neexistuje text zprávy, například v příchozím
GET
spojení, vyvolá se výjimka.
Další informace naleznete v context.Request.Body
části a context.Response.Body
IMessageBody
oddíly v tabulce kontextové proměnné.
Použití šablon Liquid s set-body
Zásady set-body
je možné nakonfigurovat tak, aby k transformaci textu požadavku nebo odpovědi používaly jazyk šablon Liquid . To může být efektivní, pokud potřebujete zcela změnit tvar formátu zprávy.
Důležité
Implementace liquidu použitá v zásadách set-body
je nakonfigurovaná v režimu C#. To je zvlášť důležité při provádění věcí, jako je filtrování. Například použití filtru kalendářních dat vyžaduje použití formátu casingu Pascal a jazyka C#, například:
{{body.foo.startDateTime| Datum:"yyyYMDDTHH:mm:ssZ"}}
Důležité
Aby bylo možné správně vytvořit vazbu k textu XML pomocí šablony Liquid, použijte zásadu set-header
k nastavení content-type na application/xml, text/xml (nebo jakýkoli typ končící na +xml); pro text JSON musí být application/json, text/json (nebo jakýkoli typ končící na +json).
Důležité
Šablony Liquid jako vstup používají text požadavku a odpovědi v aktuálním kanálu spouštění. Z tohoto důvodu nefungují šablony liquid při použití v zásadách návratové odpovědi. Zásada návratové odpovědi zruší aktuální kanál spuštění a odebere text požadavku nebo odpovědi. V důsledku toho všechny šablony liquid použité uvnitř return-response obdrží jako vstup prázdný řetězec a nevygeneruje očekávaný výstup.
Podporované filtry Liquid
V zásadách se podporují set-body
následující filtry Liquid. Příklady filtrů najdete v dokumentaci liquid.
Poznámka:
Zásada vyžaduje pro názvy filtrů Liquid písmena Pascal (například "AtLeast" místo "at_least").
- Abs
- Připojit
- Alespoň
- Nejvíce atmost
- Kapitalizovat
- Compact
- Měna
- Date
- Výchozí
- Děleno
- Malá písmena
- Escape
- První
- H
- Připojení
- Last
- Lstrip
- Mapovat
- Záporný
- Zbytek po dělení
- NewlineToBr
- Kladný
- Předpend
- Odebrat
- RemoveFirst
- Nahradit
- ReplaceFirst
- Round
- Rstrip
- Velikost
- Řez
- Sort
- Rozděleno
- Pruh
- StripHtml
- StripNewlines
- Times
- Truncate
- TruncateWords
- Uniq
- Velká písmena
- UrlDecode
- UrlEncode
Příklady
Text literálu
<set-body>Hello world!</set-body>
Přístup k textu jako řetězce
Zachováváme původní text požadavku, abychom k němu měli přístup později v kanálu.
<set-body>
@{
string inBody = context.Request.Body.As<string>(preserveContent: true);
if (inBody[0] =='c') {
inBody[0] = 'm';
}
return inBody;
}
</set-body>
Přístup k textu jako objektU JObject
Vzhledem k tomu, že původní text požadavku si nezarezervujeme, bude mít přístup později v kanálu výjimku.
<set-body>
@{
JObject inBody = context.Request.Body.As<JObject>();
if (inBody.attribute == <tag>) {
inBody[0] = 'm';
}
return inBody.ToString();
}
</set-body>
Filtrování odpovědí na základě produktu
Tento příklad ukazuje, jak provést filtrování obsahu odebráním datových prvků z odpovědi přijaté z back-endové služby při použití Starter
produktu. Příklad back-endové odpovědi obsahuje vlastnosti kořenové úrovně podobné rozhraní OpenWeather One Call 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>
Převod JSON na SOAP pomocí šablony Liquid
<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>
Transformace JSON pomocí šablony Liquid
<set-body template="liquid">
{
"order": {
"id": "{{body.customer.purchase.identifier}}",
"summary": "{{body.customer.purchase.orderShortDesc}}"
}
}
</set-body>
Přístup k textu jako dat formulářů kódovaným adresou URL
Následující příklad používá AsFormUrlEncodedContent()
výraz pro přístup k textu požadavku jako data formuláře kódované adresou URL (typ application/x-www-form-urlencoded
obsahu) a pak ho převede na JSON. Vzhledem k tomu, že původní text požadavku si nezarezervujeme, bude mít přístup později v kanálu výjimku.
<set-body>
@{
var inBody = context.Request.Body.AsFormUrlEncodedContent();
return JsonConvert.SerializeObject(inBody);
}
</set-body>
Přístup k datům formuláře kódovaný adresou URL a vrácení textu
Následující příklad používá AsFormUrlEncodedContent()
výraz pro přístup k textu požadavku jako data formuláře kódované adresou URL (typ application/x-www-form-urlencoded
obsahu), přidá data do datové části a vrátí data formuláře kódovaná adresou URL. Vzhledem k tomu, že původní text požadavku si nezarezervujeme, bude mít přístup později v kanálu výjimku.
<set-body>
@{
var body = context.Request.Body.AsFormUrlEncodedContent();
body["newKey"].Add("newValue");
return body.ToFormUrlEncodedContent();
}
</set-body>
Související zásady
Související obsah
Další informace o práci se zásadami najdete v tématech:
- Kurz: Transformace a ochrana rozhraní API
- Referenční informace o zásadách pro úplný seznam prohlášení o zásadách a jejich nastavení
- Výrazy zásad
- Nastavení nebo úprava zásad
- Opakované použití konfigurací zásad
- Úložiště fragmentů zásad
- Sada nástrojů zásad služby Azure API Management
- Vytváření zásad pomocí Microsoft Copilotu v Azure