Set body (Törzs beállítása)
A KÖVETKEZŐRE VONATKOZIK: Minden API Management-szint
set-body
A szabályzat használatával beállíthatja az üzenet törzsét egy kéréshez vagy válaszhoz. Az üzenettörzs eléréséhez használhatja a context.Request.Body
tulajdonságot vagy a context.Response.Body
tulajdonságot attól függően, hogy a szabályzat a bejövő vagy kimenő szakaszban található-e.
Fontos
Alapértelmezés szerint ha az üzenettörzset használja context.Request.Body
, vagy context.Response.Body
az eredeti üzenettörzs elveszik, és a szövegtörzset vissza kell állítani a kifejezésben. A törzstartalom megőrzéséhez állítsa be a preserveContent
paramétert true
az üzenet elérésekor. Ha preserveContent
be van állítva, true
és a kifejezés egy másik törzset ad vissza, a visszaadott törzs lesz használva.
Feljegyzés
Állítsa be a szabályzat elemeit és gyermekelemeit a szabályzatutasításban megadott sorrendben. További információ az API Management-szabályzatok beállításáról és szerkesztéséről.
Szabályzatutasítás
<set-body template="liquid" xsi-nil="blank | null" parse-date="true | false">
new body value as text
</set-body>
Attribútumok
Attribútum | Leírás | Kötelező | Alapértelmezett |
---|---|---|---|
sablon | A szabályzat által futtatott templating mód set-body módosítására szolgál. Jelenleg az egyetlen támogatott érték:- liquid - a set-body szabályzat a folyékony templatáló motort fogja használni |
Nem | N.A. |
xsi-nil | Annak szabályozására szolgál, hogy a megjelölt xsi:nil="true" elemek hogyan legyenek ábrázolva XML-hasznos adatokban. Állítsa az alábbi értékek egyikére:- blank
-
nil üres sztringdel van jelölve.- null
-
nil null értékkel van jelölve.A szabályzatkifejezések nem engedélyezettek. |
Nem | blank |
elemzési dátum | Logikai. Megadja, "/Date(1198908717056)/" hogy a dátumformátumú sztringek (például , "2012-03-21T05:40Z" ) a System.DateTime (mm/dd/yyyy hh:mm:ss ) értékre legyenek-e elemezve. Ha be van állítva, a false dátumértékek egyszerűen másolódnak.A szabályzatkifejezések nem engedélyezettek. |
Nem | true |
A kéréssel és a válaszsal kapcsolatos információk eléréséhez a Liquid-sablon a következő tulajdonságokkal rendelkező környezeti objektumhoz köthet:
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
Használat
- Szabályzatszakaszok: bejövő, kimenő, háttérrendszer
- Szabályzathatókörök: globális, munkaterület, termék, API, művelet
- Átjárók: klasszikus, v2, használat, saját üzemeltetésű, munkaterület
Használati megjegyzések
- Ha a
set-body
szabályzatot egy új vagy frissített törzs visszaadására használja, akkor nem kell beállítaniapreserveContent
true
, mert explicit módon adja meg az új törzs tartalmát. - A bejövő folyamatban lévő válasz tartalmának megőrzése nem logikus, mert még nincs válasz.
- A kimenő folyamatban lévő kérés tartalmának megőrzése nem logikus, mert a kérést már elküldték a háttérrendszernek ezen a ponton.
- Ha ezt a szabályzatot akkor használja a rendszer, ha nincs üzenettörzs, például egy bejövő
GET
üzenetben, a rendszer kivételt jelez.
További információkért tekintse meg a context.Request.Body
context.Response.Body
Környezeti változó táblában található szakaszokat és IMessageBody
szakaszokat.
Liquid-sablonok használata készlettörzsgel
A set-body
szabályzat konfigurálható úgy, hogy a Liquid templating nyelv használatával átalakítsa egy kérés vagy válasz törzsét. Ez akkor lehet hatékony, ha teljesen át kell alakítania az üzenet formátumát.
Fontos
A szabályzatban set-body
használt Liquid implementációja "C# módban" van konfigurálva. Ez különösen akkor fontos, ha olyan műveleteket végez, mint a szűrés. Például a dátumszűrő használatához Pascal-casing és C# dátumformázásra van szükség, például:
{{body.foo.startDateTime| Dátum:"yyyyMMddTHH:mm:ssZ"}}
Fontos
Annak érdekében, hogy a Liquid-sablonnal helyesen kötődjön egy XML-törzshöz, használjon egy szabályzatot set-header
a Content-Type beállításához alkalmazás/xml, szöveg/xml (vagy bármilyen , +xml végződésű típus) értékre; JSON-törzs esetén az alkalmazásnak/jsonnak, szövegnek/jsonnak (vagy bármilyen + json végződésű típusnak) kell lennie.
Fontos
A folyékony sablonok bemenetként az aktuális végrehajtási folyamat kérés-válasz törzsét használják. Emiatt a folyékony sablonok nem működnek, ha visszatérési válasz szabályzatban használják. A visszatérési válasz szabályzat megszakítja az aktuális végrehajtási folyamatot, és eltávolítja a kérés/válasz törzsét. Ennek eredményeképpen a visszatérési válaszban használt folyékony sablon bemenetként egy üres sztringet kap, és nem hozza létre a várt kimenetet.
Támogatott folyadékszűrők
A szabályzat az set-body
alábbi Folyadékszűrőket támogatja. A szűrési példákért tekintse meg a Liquid dokumentációját.
Feljegyzés
A szabályzathoz Pascal-burkolat szükséges a Liquid szűrőnevekhez (például "AtLeast" a "at_least" helyett).
- Abs
- Hozzáfűzés
- AtLeast
- AtMost
- Tőkésít
- Kompakt
- Pénznem
- Dátum
- Alapértelmezett
- DividedBy
- Kisbetű
- Menekülés
- First
- H
- Csatlakozás
- Last
- Lstrip
- Térkép
- Mínusz
- Moduló
- NewlineToBr
- Plusz ikon
- Előre felfűzve
- Eltávolítás
- RemoveFirst
- Replace
- ReplaceFirst
- Round
- Rstrip
- Méret
- Szelet
- Sort
- Split
- Szalag
- StripHtml
- StripNewlines
- Idő
- Truncate
- TruncateWords
- Uniq
- Nagybetűs
- UrlDecode
- UrlEncode
Példák
Literális szöveg
<set-body>Hello world!</set-body>
A törzs elérése sztringként
Megőrizzük az eredeti kérelemtörzset, hogy később hozzáférhessünk a folyamathoz.
<set-body>
@{
string inBody = context.Request.Body.As<string>(preserveContent: true);
if (inBody[0] =='c') {
inBody[0] = 'm';
}
return inBody;
}
</set-body>
A törzs elérése JObjectként
Mivel nem foglaljuk le az eredeti kérelemtörzset, a folyamat későbbi szakaszában való elérése kivételt eredményez.
<set-body>
@{
JObject inBody = context.Request.Body.As<JObject>();
if (inBody.attribute == <tag>) {
inBody[0] = 'm';
}
return inBody.ToString();
}
</set-body>
Válasz szűrése termék alapján
Ez a példa bemutatja, hogyan végezhet tartalomszűrést úgy, hogy eltávolítja az adatelemeket a háttérszolgáltatástól kapott válaszból a Starter
termék használatakor. A példa háttérválasz az OpenWeather One Call API-hoz hasonló gyökérszintű tulajdonságokat tartalmaz.
<!-- 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 konvertálása SOAP-ra folyékony sablon használatával
<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 átalakítása Liquid-sablonnal
<set-body template="liquid">
{
"order": {
"id": "{{body.customer.purchase.identifier}}",
"summary": "{{body.customer.purchase.orderShortDesc}}"
}
}
</set-body>
A törzs elérése URL-kódolt űrlapadatokként
Az alábbi példa a AsFormUrlEncodedContent()
kifejezéssel url-kódolt űrlapadatokként (tartalomtípusként application/x-www-form-urlencoded
) éri el a kérelem törzsét, majd JSON-ra konvertálja. Mivel nem foglaljuk le az eredeti kérelemtörzset, a folyamat későbbi szakaszában való elérése kivételt eredményez.
<set-body>
@{
var inBody = context.Request.Body.AsFormUrlEncodedContent();
return JsonConvert.SerializeObject(inBody);
}
</set-body>
Törzs elérése és visszaküldése URL-kódolt űrlapadatokként
Az alábbi példa a AsFormUrlEncodedContent()
kifejezéssel url-kódolt űrlapadatokként (tartalomtípusként application/x-www-form-urlencoded
) éri el a kérelem törzsét, adatokat ad hozzá a hasznos adatokhoz, és URL-címmel kódolt űrlapadatokat ad vissza. Mivel nem foglaljuk le az eredeti kérelemtörzset, a folyamat későbbi szakaszában való elérése kivételt eredményez.
<set-body>
@{
var body = context.Request.Body.AsFormUrlEncodedContent();
body["newKey"].Add("newValue");
return body.ToFormUrlEncodedContent();
}
</set-body>
Kapcsolódó szabályzatok
Kapcsolódó tartalom
A szabályzatok használatával kapcsolatos további információkért lásd:
- Oktatóanyag: AZ API átalakítása és védelme
- Szabályzathivatkozás a szabályzatutasságok és azok beállításainak teljes listájához
- Házirend-kifejezések
- Házirendek beállítása vagy szerkesztése
- Szabályzatkonfigurációk újrafelhasználása
- Szabályzatrészletek adattára
- Azure API Management policy toolkit
- Szabályzatok létrehozása a Microsoft Copilot használatával az Azure-ban