Alphacloud.MessagePack.HttpFormatter 5.0.0-alpha0019

This is a prerelease version of Alphacloud.MessagePack.HttpFormatter.
There is a newer prerelease version of this package available.
See the version list below for details.
dotnet add package Alphacloud.MessagePack.HttpFormatter --version 5.0.0-alpha0019
                    
NuGet\Install-Package Alphacloud.MessagePack.HttpFormatter -Version 5.0.0-alpha0019
                    
This command is intended to be used within the Package Manager Console in Visual Studio, as it uses the NuGet module's version of Install-Package.
<PackageReference Include="Alphacloud.MessagePack.HttpFormatter" Version="5.0.0-alpha0019" />
                    
For projects that support PackageReference, copy this XML node into the project file to reference the package.
<PackageVersion Include="Alphacloud.MessagePack.HttpFormatter" Version="5.0.0-alpha0019" />
                    
Directory.Packages.props
<PackageReference Include="Alphacloud.MessagePack.HttpFormatter" />
                    
Project file
For projects that support Central Package Management (CPM), copy this XML node into the solution Directory.Packages.props file to version the package.
paket add Alphacloud.MessagePack.HttpFormatter --version 5.0.0-alpha0019
                    
#r "nuget: Alphacloud.MessagePack.HttpFormatter, 5.0.0-alpha0019"
                    
#r directive can be used in F# Interactive and Polyglot Notebooks. Copy this into the interactive tool or source code of the script to reference the package.
#:package Alphacloud.MessagePack.HttpFormatter@5.0.0-alpha0019
                    
#:package directive can be used in C# file-based apps starting in .NET 10 preview 4. Copy this into a .cs file before any lines of code to reference the package.
#addin nuget:?package=Alphacloud.MessagePack.HttpFormatter&version=5.0.0-alpha0019&prerelease
                    
Install as a Cake Addin
#tool nuget:?package=Alphacloud.MessagePack.HttpFormatter&version=5.0.0-alpha0019&prerelease
                    
Install as a Cake Tool

MessagePack Formatters for ASP.NET Core MVC and HttpClient

Allows to use MessagePack format with ASP.NET Core MVC. If multiple formatters are configured, content negotiation is used to determine which formatter to use.

This library leverages MessagePack-CSharp library by Yoshifumi Kawai (a.k.a. neuecc).

Build status

Stable Pre-release
Build Master PreRelease
NuGet ASP.NET Core MVC formatters NuGet NuGet
NuGet MediaTypeFormatter for HttpClient NuGet NuGet

Packages

ASP.NET Core MVC formatters

Installation

Install-Packagge Alphacloud.MessagePack.AspNetCore.Formatters

Features

  • Input formatter (decode MessagePack payload).
  • Output formatter (encode MessagePack payload).
  • Source link support (source code on demand in debugger).

Usage

Default configuration

Default configuration uses application/x-msgpack as media typeidentificator, msgpack as file name extension and ContractlessStandardResolver.

Add services.AddMessagePack(); call to your Startup.cs / ConfigureServices

public void ConfigureServices(IServiceCollection services)
{
    services.AddMessagePack();
    // ...
}
MVC Core (ASP.NET Core 2.x)

When using minimal MVC configuration (e.g. in WebAPI service) only base services are added by default. You are responsible for configuring each of the service you are going to use.

Note: order of formatters is important - in the example below Json will be default serializer, unless MVC is configured to reject requests with unsupported media type.

public void ConfigureServices(IServiceCollection services)
{
  services.AddMvcCore(options =>
    {
        // ...
    })
    .AddDataAnnotations()
    .AddJsonOptions(options =>
    {
        options.SerializerSettings.Culture = CultureInfo.InvariantCulture;
        options.SerializerSettings.Formatting = Formatting.None;
    })
    .AddFormatterMappings()
    .AddJsonFormatters()
    .AddXmlSerializerFormatters()
    .AddMsgPackFormatters()
    ;
}

Custom configuration

Default configuration can be changed by providing callback to AddMessagePack method.

Available settings:

  • MediaTypes - allows to specify additional media handled by MessagePack formatters. Default is application/x-msgpack.
  • FormatterResolver - allows to customize serialization, see MsgPack object serialization for details.
  • FileExtensions - allows to specify reponse format URL mapping. Default is msgpack. See sample project or Microsoft Docs for more information.
  • Compression - allows to specify LZ4 compression for messages.
  • UseOldSpecification - write message using old specification compatibility mode. Reading will support both old and new specifications. See Message Pack format specification.
  • OmitAssemblyVersion - don't write assembly version and public key token when using typeless formatter.
  • AllowAssemblyVersionMismatch - allows assembly version mistmatch when loading types during deserialization.
services.AddMessagePack(opt =>
  {
      opt.MediaTypes.Clear();
      opt.MediaTypes.Add("application/x-messagepack");
      opt.FileExtensions.Add("messagepack");
      opt.FormatterResolver = MessagePack.Resolvers.ContractlessStandardResolverAllowPrivate.Instance;
  })

MediaTypeFormatter for HttpClient

Microsoft.AspNet.WebApi.Client package contains adds support for formatting and content negotiation to System.Net.Http. It allows to add custom content serializers by extending MediaTypeFormatter class.

Installation

Install-Package Alphacloud.MessagePack.HttpFormatter

Usage

Sending request

Library contains two extension methods PostAsMsgPackAsync and PutAsMsgPackAsync. To serialize payload ContractlessStandardResolver is used, which gives a JSON-like experience.

var response = await httpClient.PostAsMsgPackAsync(uri, payload, cancellationToken).ConfigureAwait(false);

Reading response

To deserialize Msgpack response, formatter must be added to formatters collection passed to ReadAsAsync extension method.

This is recommeded method as it enables content negotiation.

var res = await response.Content.ReadAsAsync<TestModel>(_formatters, CancellationToken.None);

if you are expecting only MsgPack content, use MsgPackHttpContentExtensions.ReadMsgPackAsAsync() for HttpContent.

Samples

Sample application is located at src/samples/NetCoreWebApi. Sample Postman requests can be found at src/samples/MessagePack.postman_collection.json. To post MessagePack content, use SingleModel.msgpack located under src/samples.

References

Product Compatible and additional computed target framework versions.
.NET net5.0 was computed.  net5.0-windows was computed.  net6.0 was computed.  net6.0-android was computed.  net6.0-ios was computed.  net6.0-maccatalyst was computed.  net6.0-macos was computed.  net6.0-tvos was computed.  net6.0-windows was computed.  net7.0 was computed.  net7.0-android was computed.  net7.0-ios was computed.  net7.0-maccatalyst was computed.  net7.0-macos was computed.  net7.0-tvos was computed.  net7.0-windows was computed.  net8.0 was computed.  net8.0-android was computed.  net8.0-browser was computed.  net8.0-ios was computed.  net8.0-maccatalyst was computed.  net8.0-macos was computed.  net8.0-tvos was computed.  net8.0-windows was computed.  net9.0 was computed.  net9.0-android was computed.  net9.0-browser was computed.  net9.0-ios was computed.  net9.0-maccatalyst was computed.  net9.0-macos was computed.  net9.0-tvos was computed.  net9.0-windows was computed.  net10.0 was computed.  net10.0-android was computed.  net10.0-browser was computed.  net10.0-ios was computed.  net10.0-maccatalyst was computed.  net10.0-macos was computed.  net10.0-tvos was computed.  net10.0-windows was computed. 
.NET Core netcoreapp2.0 was computed.  netcoreapp2.1 was computed.  netcoreapp2.2 was computed.  netcoreapp3.0 was computed.  netcoreapp3.1 was computed. 
.NET Standard netstandard2.0 is compatible.  netstandard2.1 was computed. 
.NET Framework net461 was computed.  net462 was computed.  net463 was computed.  net47 was computed.  net471 was computed.  net472 was computed.  net48 was computed.  net481 was computed. 
MonoAndroid monoandroid was computed. 
MonoMac monomac was computed. 
MonoTouch monotouch was computed. 
Tizen tizen40 was computed.  tizen60 was computed. 
Xamarin.iOS xamarinios was computed. 
Xamarin.Mac xamarinmac was computed. 
Xamarin.TVOS xamarintvos was computed. 
Xamarin.WatchOS xamarinwatchos was computed. 
Compatible target framework(s)
Included target framework(s) (in package)
Learn more about Target Frameworks and .NET Standard.

NuGet packages

This package is not used by any NuGet packages.

GitHub repositories

This package is not used by any popular GitHub repositories.

Version Downloads Last Updated
5.0.0-alpha0020 161 3/14/2024
5.0.0-alpha0019 157 3/8/2024
5.0.0-alpha0013 296 4/1/2023
5.0.0-alpha0012 228 3/31/2023
4.1.0 147,749 3/31/2023
4.0.0 19,545 5/30/2022
4.0.0-beta0001 253 5/27/2022
4.0.0-alpha0025 266 5/27/2022
4.0.0-alpha0021 266 5/26/2022
3.2.0 5,612 8/1/2021
3.2.0-alpha0018 374 8/1/2021
3.2.0-alpha0017 395 8/1/2021
3.2.0-alpha0016 388 8/1/2021
3.2.0-alpha0010 362 6/20/2021
3.2.0-alpha0008 367 4/30/2021
3.2.0-alpha0007 397 4/19/2021
3.2.0-alpha0006 403 4/19/2021
3.2.0-alpha0001 345 1/29/2021
3.1.0 1,406 1/29/2021
3.1.0-beta0001 329 1/29/2021
3.1.0-alpha0003 346 1/28/2021
3.1.0-alpha0002 402 12/27/2020
3.1.0-alpha0001 396 12/27/2020
3.0.0 677 12/6/2020
3.0.0-beta0001 480 12/5/2020
2.3.0-alpha0010 485 12/5/2020
2.3.0-alpha0001 480 10/21/2020
2.2.0 1,241 10/21/2020
2.2.0-beta0001 468 10/21/2020
2.2.0-alpha0045 486 10/21/2020
2.2.0-alpha0025 516 2/26/2020
2.2.0-alpha0024 597 2/8/2020
2.2.0-alpha0023 596 2/8/2020
2.2.0-alpha0020 520 8/19/2020
2.2.0-alpha0019 521 6/22/2020
2.2.0-alpha0017 484 5/20/2020
2.2.0-alpha0016 527 5/20/2020
2.2.0-alpha0015 484 5/19/2020
2.2.0-alpha0001 522 3/1/2020
2.1.3 1,713 8/19/2020
2.1.3-beta0001 486 8/19/2020
2.1.2 1,675 5/29/2020
2.1.2-beta0001 488 5/29/2020
2.1.1 1,016 3/1/2020
2.1.1-beta0001 533 3/1/2020
2.1.0 847 2/8/2020
2.1.0-beta0001 595 2/8/2020
2.1.0-alpha0004 599 2/8/2020
2.1.0-alpha0002 610 2/8/2020
2.0.0 916 1/14/2020
2.0.0-beta0001 516 1/14/2020
2.0.0-alpha0003 632 1/12/2020
1.1.0-alpha0002 531 11/18/2019
1.0.0 764 11/18/2019
1.0.0-beta0001 517 11/18/2019
0.3.0-alpha0011 531 11/9/2019
0.3.0-alpha0005 568 7/10/2019
0.3.0-alpha0002 556 7/6/2019
0.3.0-alpha0001 576 5/8/2019
0.2.0 2,292 2/5/2019
0.2.0-alpha0019 663 2/4/2019
0.2.0-alpha0018 662 2/4/2019