ASP.NET CORE MVC Formatters สำหรับอินพุตและเอาต์พุต MessagePack
MessagePack เป็นรูปแบบการทำให้เป็นอนุกรมไบนารีที่มีประสิทธิภาพ ช่วยให้คุณแลกเปลี่ยนข้อมูลระหว่างหลายภาษาเช่น JSON แต่มันเร็วขึ้นและเล็กลง จำนวนเต็มขนาดเล็กถูกเข้ารหัสเป็นไบต์เดียวและสตริงสั้น ๆ ทั่วไปต้องการไบต์พิเศษเพียงหนึ่งไบต์นอกเหนือจากสตริงด้วยตัวเอง
การเจรจาต่อรองเนื้อหาเกิดขึ้นเมื่อลูกค้าระบุส่วนหัว Accept รูปแบบเริ่มต้นที่ใช้โดย ASP.NET Core คือ JSON แต่ลูกค้าสามารถระบุรูปแบบ 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 > ( ) ;
}ในตัวอย่างนี้ใช้แพ็คเกจ byndyusoft.net.http.messagepack
แอป ASP.NET Core ที่จำเป็นต้องสนับสนุนรูปแบบ MessagePack สามารถเพิ่ม Byndyusoft.AspNetCore.Mvc.Formatters.MessagePack แพ็คเกจ Nuget และกำหนดค่าการสนับสนุน มีฟอร์ทเตอร์แยกต่างหากสำหรับอินพุตและเอาต์พุต ฟอร์มอทเมทเตอร์อินพุตถูกใช้โดยการผูกโมเดล รูปแบบเอาท์พุทใช้ในการจัดรูปแบบการตอบสนอง
dotnet add package Byndyusoft.AspNetCore.Mvc.Formatters.MessagePack MessagePack Formatters ที่ใช้งานโดยใช้ MessagePackSerializer ได้รับการกำหนดค่าโดยการเรียก AddMessagePackFormatters :
public void ConfigureServices ( IServiceCollection services )
{
services . AddMvcCore ( )
. AddMessagePackFormatters ( ) ;
} รหัสก่อนหน้านี้เป็นซีเรียลผลลัพธ์โดยใช้ MessagePackSerializer
คุณสมบัติสำหรับ MessagePack Formatters สามารถกำหนดค่าได้โดยใช้ Microsoft.AspNetCore.Mvc.MvcMessagePackOptions.SerializerOptions
services . AddMvcCore ( )
. AddMessagePackFormatters (
options =>
{
options . SerializerOptions
. WithResolver ( TypelessContractlessStandardResolver . Instance )
. WithCompression ( MessagePackCompression . Lz4Block )
. WithSecurity ( MessagePackSecurity . TrustedData ) ;
} ) ; ลูกค้าสามารถขอรูปแบบเฉพาะเป็นส่วนหนึ่งของ URL ได้เช่น:
ควรระบุการแมปจากเส้นทางคำขอในเส้นทางที่ API ใช้ ตัวอย่างเช่น:
[ Route ( "api/[controller]" ) ]
[ ApiController ]
[ FormatFilter ]
public class ProductsController : ControllerBase
{
[ HttpGet ( "{id}.{format?}" ) ]
public Product Get ( int id )
{ เส้นทางก่อนหน้านี้อนุญาตให้ระบุรูปแบบที่ร้องขอเป็นส่วนขยายไฟล์เสริม แอตทริบิวต์ [FormatFilter] ตรวจสอบการมีอยู่ของค่ารูปแบบใน RoutEDATA และแมปรูปแบบการตอบกลับไปยังรูปแบบที่เหมาะสมเมื่อสร้างการตอบกลับ
| เส้นทาง | รูปแบบ |
|---|---|
| /API/ผลิตภัณฑ์/5 | รูปแบบเอาต์พุตเริ่มต้น |
| /api/products/5.json | Formatter JSON (ถ้ากำหนดค่า) |
| /api/products/5.MSGPACK | Formatter MessagePack (ถ้ากำหนดค่า) |
ในการมีส่วนร่วมคุณจะต้องตั้งค่าสภาพแวดล้อมในท้องถิ่นของคุณดูสิ่งที่จำเป็นต้องมี สำหรับคู่มือการบริจาคและเวิร์กโฟลว์ดูวงจรชีวิตการพัฒนาแพ็คเกจ
ภาพรวมโดยละเอียดเกี่ยวกับวิธีการมีส่วนร่วมสามารถพบได้ในคู่มือการสนับสนุน
ตรวจสอบให้แน่ใจว่าคุณได้ติดตั้งข้อกำหนดเบื้องต้นทั้งหมดต่อไปนี้ในเครื่องพัฒนาของคุณ:
srctestsmaster ของโครงการ