Acara
Membangun Aplikasi dan Agen AI
17 Mar, 21 - 21 Mar, 10
Bergabunglah dengan seri meetup untuk membangun solusi AI yang dapat diskalakan berdasarkan kasus penggunaan dunia nyata dengan sesama pengembang dan pakar.
Daftar sekarangBrowser ini sudah tidak didukung.
Mutakhirkan ke Microsoft Edge untuk memanfaatkan fitur, pembaruan keamanan, dan dukungan teknis terkini.
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.
<set-body template="liquid" xsi-nil="blank | null" parse-date="true | false">
new body value as text
</set-body>
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
set-body
kebijakan untuk mengembalikan isi baru atau yang diperbarui, Anda tidak perlu mengaturnya preserveContent
true
karena Anda secara eksplisit menyediakan konten isi baru.GET
, pengecualian akan dilemparkan.Untuk informasi selengkapnya, lihat bagian context.Request.Body
, context.Response.Body
, dan IMessageBody
dalam tabel Variabel konteks.
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 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").
<set-body>Hello world!</set-body>
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>
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>
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>
<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>
<set-body template="liquid">
{
"order": {
"id": "{{body.customer.purchase.identifier}}",
"summary": "{{body.customer.purchase.orderShortDesc}}"
}
}
</set-body>
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>
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>
Untuk informasi selengkapnya tentang bekerja dengan kebijakan, lihat:
Acara
Membangun Aplikasi dan Agen AI
17 Mar, 21 - 21 Mar, 10
Bergabunglah dengan seri meetup untuk membangun solusi AI yang dapat diskalakan berdasarkan kasus penggunaan dunia nyata dengan sesama pengembang dan pakar.
Daftar sekarang