ASP.NET Core MVC Formatters untuk Input dan Output MessagePack.
MessagePack adalah format serialisasi biner yang efisien. Ini memungkinkan Anda bertukar data di antara berbagai bahasa seperti JSON. Tapi lebih cepat dan lebih kecil. Bilangan bulat kecil dikodekan menjadi satu byte, dan string pendek yang khas hanya membutuhkan satu byte tambahan selain string itu sendiri.
Negosiasi konten terjadi ketika klien menentukan header Accept . Format default yang digunakan oleh ASP.NET Core adalah JSON. Tetapi klien dapat menentukan format MessagePack :
using ( var httpClient = new HttpClient ( ) )
{
client . DefaultRequestHeaders . Accept . Add ( new MediaTypeWithQualityHeaderValue ( "application/msgpack" ) ) ;
var response = await client . GetAsync ( "/api/products/5" ) ;
var product = response . Content . ReadFromMessagePackAsync < Product > ( ) ;
}Dalam contoh ini ByndyUsoft.net.http.messagePack digunakan.
Asp.net Core Apps yang perlu mendukung format MessagePack dapat menambahkan Byndyusoft.AspNetCore.Mvc.Formatters.MessagePack Nuget Paket dan mengkonfigurasi dukungan. Ada formatter terpisah untuk input dan output. Formatter input digunakan oleh pengikatan model. Formatter output digunakan untuk memformat respons.
dotnet add package Byndyusoft.AspNetCore.Mvc.Formatters.MessagePack Formatter MessagePack diimplementasikan menggunakan MessagePackSerializer dikonfigurasi dengan memanggil AddMessagePackFormatters :
public void ConfigureServices ( IServiceCollection services )
{
services . AddMvcCore ( )
. AddMessagePackFormatters ( ) ;
} Kode sebelumnya membuat serial hasil menggunakan MessagePackSerializer .
Fitur untuk format messagePack dapat dikonfigurasi menggunakan Microsoft.AspNetCore.Mvc.MvcMessagePackOptions.SerializerOptions .
services . AddMvcCore ( )
. AddMessagePackFormatters (
options =>
{
options . SerializerOptions
. WithResolver ( TypelessContractlessStandardResolver . Instance )
. WithCompression ( MessagePackCompression . Lz4Block )
. WithSecurity ( MessagePackSecurity . TrustedData ) ;
} ) ; Klien dapat meminta format tertentu sebagai bagian dari URL, misalnya:
Pemetaan dari jalur permintaan harus ditentukan dalam rute yang digunakan API. Misalnya:
[ Route ( "api/[controller]" ) ]
[ ApiController ]
[ FormatFilter ]
public class ProductsController : ControllerBase
{
[ HttpGet ( "{id}.{format?}" ) ]
public Product Get ( int id )
{ Rute sebelumnya memungkinkan format yang diminta ditentukan sebagai ekstensi file opsional. Atribut [FormatFilter] memeriksa adanya nilai format dalam routedata dan memetakan format respons ke formatter yang sesuai ketika respons dibuat.
| Rute | Formatter |
|---|---|
| /API/Produk/5 | Formatter output default |
| /api/products/5.json | Formatter JSON (jika dikonfigurasi) |
| /api/products/5.msgpack | Formatter MessagePack (jika dikonfigurasi) |
Untuk berkontribusi, Anda perlu mengatur lingkungan lokal Anda, lihat prasyarat. Untuk panduan kontribusi dan alur kerja, lihat siklus hidup pengembangan paket.
Tinjauan terperinci tentang cara berkontribusi dapat ditemukan di panduan yang berkontribusi.
Pastikan Anda telah memasang semua prasyarat berikut di mesin pengembangan Anda:
srctestsmaster Proyek