ASP.NET CORE MVC ФОРМАТЕРЫ для ввода и вывода 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 FormaterPack Formatters, реализованные с использованием MessagePackSerializer настроены, вызывая AddMessagePackFormatters :
public void ConfigureServices ( IServiceCollection services )
{
services . AddMvcCore ( )
. AddMessagePackFormatters ( ) ;
} Предыдущий код сериализует результаты с использованием MessagePackSerializer .
Функции для форматеров MessagePack могут быть настроены с использованием 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/Products/5 | Форматер вывода по умолчанию |
| /api/products/5.json | Форматер JSON (если настроен) |
| /api/products/5.msgpack | Форматер сообщений (если настроен) |
Чтобы внести свой вклад, вам нужно будет настроить местную среду, см. Предварительные условия. Руководство для вклада и рабочего процесса см. В жизненном цикле разработки упаковки.
Подробный обзор того, как внести свой вклад, можно найти в Руководстве для участия.
Убедитесь, что вы установили все следующие предпосылки на машине разработки:
srctestsmaster филиал проекта