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:

- liquidset-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

Catatan penggunaan

  • Jika Anda menggunakan set-body kebijakan untuk mengembalikan isi baru atau yang diperbarui, Anda tidak perlu mengaturnya preserveContenttrue 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
  • Ringkas
  • 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-urlencodedkonten ), 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-urlencodedkonten ), 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: