ASP.NET核心MVC格式化,用於MessagePack輸入和輸出。
MessagePack是一種有效的二進制序列化格式。它使您可以在JSON(例如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軟件包。
需要支持MessagePack格式的ASP.NET核心應用程序可以添加Byndyusoft.AspNetCore.Mvc.Formatters.MessagePack nuget軟件包和配置支持。有用於輸入和輸出的單獨的格式。輸入格式器由模型結合使用。輸出格式用於格式化響應。
dotnet add package Byndyusoft.AspNetCore.Mvc.Formatters.MessagePack通過調用AddMessagePackFormatters配置了使用MessagePackSerializer實現的MessagePack Formatters:
public void ConfigureServices ( IServiceCollection services )
{
services . AddMvcCore ( )
. AddMessagePackFormatters ( ) ;
}前面的代碼使用MessagePackSerializer序列化結果。
可以使用Microsoft.AspNetCore.Mvc.MvcMessagePackOptions.SerializerOptions配置MessagePack格式化的功能。
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/products/5 | 默認輸出格式 |
| /PI/products/5.json | JSON Formatter(如果配置) |
| /PI/products/5.msgpack | MessagePack格式化(如果配置) |
為了做出貢獻,您需要設置本地環境,請參閱先決條件。有關貢獻和工作流程指南,請參閱包裝開發生命週期。
有關如何貢獻的詳細概述可以在貢獻指南中找到。
確保您已經在開發機上安裝了以下所有先決條件:
src中實現軟件包邏輯tests中添加或添加或附加單位測試(與編碼之前和同時使用編碼)master分支