Mengatur isi
BERLAKU UNTUK: Semua tingkatAN API Management
set-body
Gunakan kebijakan untuk mengatur isi pesan untuk permintaan atau respons. Untuk mengakses bodi pesan, Anda dapat menggunakan properti context.Request.Body
atau context.Response.Body
, tergantung pada apakah kebijakan berada di bagian masuk atau keluar.
Penting
Secara default saat Anda mengakses isi pesan menggunakan context.Request.Body
atau context.Response.Body
, isi pesan asli hilang dan harus diatur dengan mengembalikan isi kembali dalam ekspresi. Untuk mempertahankan konten bodi, atur parameter preserveContent
ke true
saat mengakses pesan. Jika preserveContent
diatur ke true
dan bodi yang berbeda dikembalikan oleh ekspresi, bodi yang dikembalikan digunakan.
Catatan
Tetapkan elemen kebijakan dan elemen turunan dalam urutan yang disediakan dalam pernyataan kebijakan. Pelajari lebih lanjut cara mengatur atau mengedit kebijakan API Management.
Pernyataan kebijakan
<set-body template="liquid" xsi-nil="blank | null" parse-date="true | false">
new body value as text
</set-body>
Atribut
Atribut | Deskripsi | Wajib diisi | Default |
---|---|---|---|
templat | Digunakan untuk mengubah mode templat tempat set-body kebijakan berjalan. Saat ini satu-satunya nilai yang didukung adalah:- liquid set-body - kebijakan akan menggunakan mesin templat cair |
No | T/A |
xsi-nil | Digunakan untuk mengontrol bagaimana elemen yang ditandai dengan xsi:nil="true" direpresentasikan dalam payload XML. Atur ke salah satu nilai berikut:- blank - nil diwakili dengan string kosong.- null - nil diwakili dengan nilai null.Ekspresi kebijakan tidak diizinkan. |
No | blank |
parse-date | Boolean. Menentukan apakah string berformat tanggal (misalnya, , "/Date(1198908717056)/" "2012-03-21T05:40Z" ) diurai ke System.DateTime (mm/dd/yyyy hh:mm:ss ). Ketika diatur ke false , nilai tanggal hanya disalin.Ekspresi kebijakan tidak diizinkan. |
No | true |
Untuk mengakses informasi tentang permintaan dan respons, templat Liquid dapat mengikat ke objek konteks dengan properti berikut:
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
Penggunaan
- Bagian kebijakan: masuk, keluar, backend
- Cakupan kebijakan: global, ruang kerja, produk, API, operasi
- Gateway: klasik, v2, konsumsi, dihost sendiri, ruang kerja
Catatan penggunaan
- Jika Anda menggunakan
set-body
kebijakan untuk mengembalikan isi baru atau yang diperbarui, Anda tidak perlu mengaturnyapreserveContent
true
karena Anda secara eksplisit menyediakan konten isi baru. - Mempertahankan konten respons dalam alur masuk tidak masuk akal karena belum ada respons.
- Mempertahankan konten permintaan dalam alur keluar tidak masuk akal karena permintaan telah dikirim ke backend pada saat ini.
- Jika kebijakan ini digunakan ketika tidak ada isi pesan, misalnya dalam masuk
GET
, pengecualian akan dilemparkan.
Untuk informasi selengkapnya, lihat bagian context.Request.Body
, context.Response.Body
, dan IMessageBody
dalam tabel Variabel konteks.
Menggunakan templat Liquid dengan set-body
Kebijakan set-body
dapat dikonfigurasi untuk menggunakan bahasa pembuatan templat Liquid untuk mengubah bodi permintaan atau respons. Ini bisa sangat efektif jika Anda perlu sepenuhnya membentuk kembali format pesan Anda.
Penting
Implementasi Liquid yang digunakan dalam kebijakan set-body
dikonfigurasi dalam 'mode C#'. Ini sangat penting ketika melakukan hal-hal seperti pemfilteran. Sebagai contoh, menggunakan filter tanggal memerlukan penggunaan casing Pascal dan pemformatan tanggal C# misalnya:
{{body.foo.startDateTime| Date:"yyyyMMddTHH:mm:ssZ"}}
Penting
Untuk mengikat dengan benar ke bodi XML menggunakan templat Liquid, gunakan kebijakan set-header
untuk mengatur Tipe Konten ke aplikasi/xml, teks/xml (atau jenis apa pun yang berakhir dengan +xml); untuk bodi JSON, harus berupa aplikasi/json, teks/json (atau jenis apa pun yang berakhir dengan +json).
Penting
Templat liquid menggunakan isi permintaan/respons dalam alur eksekusi saat ini sebagai inputnya. Untuk alasan ini, templat cair tidak berfungsi saat digunakan di dalam kebijakan respons pengembalian. Kebijakan respons pengembalian membatalkan alur eksekusi saat ini dan menghapus isi permintaan/respons. Akibatnya, templat cair apa pun yang digunakan di dalam return-response akan menerima string kosong sebagai inputnya dan tidak akan menghasilkan output yang diharapkan.
Filter Liquid yang didukung
Filter Liquid berikut didukung dalam kebijakan set-body
. Untuk contoh filter, lihat dokumentasi Liquid.
Catatan
Kebijakan ini memerlukan casing Pascal untuk nama filter Liquid (misalnya, "AtLeast" alih-alih "at_least").
- Abs
- Lampirkan
- AtLeast
- AtMost
- Memanfaatkan
- Compact
- Mata Uang
- Tanggal
- Default
- DividedBy
- Huruf kecil
- Escape
- First
- H
- Bergabung
- Last
- Lstrip
- Peta
- Minus
- Modulo
- NewlineToBr
- Plus
- Prepend
- Hapus
- RemoveFirst
- Menggantikan
- ReplaceFirst
- Round
- Rstrip
- Ukuran
- Irisan
- Sort
- Split
- Strip
- StripHtml
- StripNewlines
- Waktu
- Truncate
- TruncateWords
- Uniq
- Huruf besar
- UrlDecode
- UrlEncode
Contoh
Teks literal
<set-body>Hello world!</set-body>
Mengakses isi sebagai string
Kami mempertahankan isi permintaan asli sehingga kami dapat mengaksesnya nanti di alur.
<set-body>
@{
string inBody = context.Request.Body.As<string>(preserveContent: true);
if (inBody[0] =='c') {
inBody[0] = 'm';
}
return inBody;
}
</set-body>
Mengakses isi sebagai JObject
Karena kami tidak memesan isi permintaan asli, mengaksesnya nanti di alur akan menghasilkan pengecualian.
<set-body>
@{
JObject inBody = context.Request.Body.As<JObject>();
if (inBody.attribute == <tag>) {
inBody[0] = 'm';
}
return inBody.ToString();
}
</set-body>
Filter respons berdasarkan produk
Contoh ini menunjukkan cara melakukan pemfilteran konten dengan menghapus elemen data dari respons yang diterima dari layanan backend saat menggunakan produk Starter
. Contoh respons backend antara lain properti tingkat akar yang mirip dengan API Satu Panggilan OPENWeather.
<!-- 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>
Mengonversi JSON ke SOAP menggunakan templat 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>
Mengubah JSON menggunakan templat Liquid
<set-body template="liquid">
{
"order": {
"id": "{{body.customer.purchase.identifier}}",
"summary": "{{body.customer.purchase.orderShortDesc}}"
}
}
</set-body>
Mengakses isi sebagai data formulir yang dikodekan URL
Contoh berikut menggunakan AsFormUrlEncodedContent()
ekspresi untuk mengakses isi permintaan sebagai data formulir yang dikodekan URL (jenis application/x-www-form-urlencoded
konten ), lalu mengonversinya ke JSON. Karena kami tidak memesan isi permintaan asli, mengaksesnya nanti di alur akan menghasilkan pengecualian.
<set-body>
@{
var inBody = context.Request.Body.AsFormUrlEncodedContent();
return JsonConvert.SerializeObject(inBody);
}
</set-body>
Mengakses dan mengembalikan isi sebagai data formulir yang dikodekan URL
Contoh berikut menggunakan AsFormUrlEncodedContent()
ekspresi untuk mengakses isi permintaan sebagai data formulir yang dikodekan URL (jenis application/x-www-form-urlencoded
konten ), menambahkan data ke payload, dan mengembalikan data formulir yang dikodekan URL. Karena kami tidak memesan isi permintaan asli, mengaksesnya nanti di alur akan menghasilkan pengecualian.
<set-body>
@{
var body = context.Request.Body.AsFormUrlEncodedContent();
body["newKey"].Add("newValue");
return body.ToFormUrlEncodedContent();
}
</set-body>
Kebijakan terkait
Konten terkait
Untuk informasi selengkapnya tentang bekerja dengan kebijakan, lihat:
- Tutorial: Mengubah dan melindungi API Anda
- Referensi Kebijakan untuk daftar lengkap pernyataan kebijakan dan pengaturannya
- Ekspresi kebijakan
- Mengatur atau mengedit kebijakan
- Menggunakan kembali konfigurasi kebijakan
- Repositori cuplikan kebijakan
- Kebijakan penulis menggunakan Microsoft Copilot di Azure