Alphacloud.MessagePack.AspNetCore.Formatters
5.0.0-alpha0020
dotnet add package Alphacloud.MessagePack.AspNetCore.Formatters --version 5.0.0-alpha0020
NuGet\Install-Package Alphacloud.MessagePack.AspNetCore.Formatters -Version 5.0.0-alpha0020
<PackageReference Include="Alphacloud.MessagePack.AspNetCore.Formatters" Version="5.0.0-alpha0020" />
paket add Alphacloud.MessagePack.AspNetCore.Formatters --version 5.0.0-alpha0020
#r "nuget: Alphacloud.MessagePack.AspNetCore.Formatters, 5.0.0-alpha0020"
// Install Alphacloud.MessagePack.AspNetCore.Formatters as a Cake Addin #addin nuget:?package=Alphacloud.MessagePack.AspNetCore.Formatters&version=5.0.0-alpha0020&prerelease // Install Alphacloud.MessagePack.AspNetCore.Formatters as a Cake Tool #tool nuget:?package=Alphacloud.MessagePack.AspNetCore.Formatters&version=5.0.0-alpha0020&prerelease
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 | ||
NuGet ASP.NET Core MVC formatters | ||
NuGet MediaTypeFormatter for HttpClient |
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 isapplication/x-msgpack
.FormatterResolver
- allows to customize serialization, see MsgPack object serialization for details.FileExtensions
- allows to specify reponse format URL mapping. Default ismsgpack
. 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
- MessagePack format https://msgpack.org/index.html
- MessagePack-CSharp https://github.com/neuecc/MessagePack-CSharp
- AddMVC vs AddMvcCore
- Content negotiation in ASP.NET Core MVC https://code-maze.com/content-negotiation-dotnet-core/
- Microsoft.AspNet.WebApi.Client https://www.nuget.org/packages/Microsoft.AspNet.WebApi.Client/
- Source Link - https://github.com/ctaggart/SourceLink
- Postman https://www.getpostman.com/downloads/
Product | Versions Compatible and additional computed target framework versions. |
---|---|
.NET | net6.0 is compatible. 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 is compatible. 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 is compatible. 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. |
-
net6.0
- JetBrains.Annotations (>= 2023.3.0)
- MessagePack (>= 2.5.140 && < 3.0.0)
-
net7.0
- JetBrains.Annotations (>= 2023.3.0)
- MessagePack (>= 2.5.140 && < 3.0.0)
-
net8.0
- JetBrains.Annotations (>= 2023.3.0)
- MessagePack (>= 2.5.140 && < 3.0.0)
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 | 118 | 3/14/2024 |
5.0.0-alpha0019 | 101 | 3/8/2024 |
5.0.0-alpha0013 | 234 | 4/1/2023 |
5.0.0-alpha0012 | 117 | 3/31/2023 |
4.1.0 | 44,946 | 3/31/2023 |
4.0.0 | 13,070 | 5/30/2022 |
4.0.0-beta0001 | 162 | 5/27/2022 |
4.0.0-alpha0025 | 151 | 5/27/2022 |
4.0.0-alpha0021 | 154 | 5/26/2022 |
3.2.0 | 11,020 | 8/1/2021 |
3.2.0-alpha0018 | 267 | 8/1/2021 |
3.2.0-alpha0017 | 274 | 8/1/2021 |
3.2.0-alpha0016 | 270 | 8/1/2021 |
3.2.0-alpha0010 | 211 | 6/20/2021 |
3.2.0-alpha0008 | 227 | 4/30/2021 |
3.2.0-alpha0007 | 265 | 4/19/2021 |
3.2.0-alpha0006 | 255 | 4/19/2021 |
3.2.0-alpha0001 | 214 | 1/29/2021 |
3.1.0 | 5,281 | 1/29/2021 |
3.1.0-beta0001 | 203 | 1/29/2021 |
3.1.0-alpha0003 | 230 | 1/28/2021 |
3.1.0-alpha0002 | 282 | 12/27/2020 |
3.1.0-alpha0001 | 270 | 12/27/2020 |
3.0.0 | 588 | 12/6/2020 |
3.0.0-beta0001 | 335 | 12/5/2020 |
2.3.0-alpha0010 | 363 | 12/5/2020 |
2.3.0-alpha0001 | 327 | 10/21/2020 |
2.2.0 | 2,092 | 10/21/2020 |
2.2.0-beta0001 | 345 | 10/21/2020 |
2.2.0-alpha0045 | 329 | 10/21/2020 |
2.2.0-alpha0025 | 398 | 2/26/2020 |
2.2.0-alpha0024 | 469 | 2/8/2020 |
2.2.0-alpha0023 | 446 | 2/8/2020 |
2.2.0-alpha0020 | 354 | 8/19/2020 |
2.2.0-alpha0019 | 394 | 6/22/2020 |
2.2.0-alpha0017 | 397 | 5/20/2020 |
2.2.0-alpha0016 | 397 | 5/20/2020 |
2.2.0-alpha0015 | 349 | 5/19/2020 |
2.2.0-alpha0001 | 359 | 3/1/2020 |
2.1.3 | 2,390 | 8/19/2020 |
2.1.3-beta0001 | 364 | 8/19/2020 |
2.1.2 | 1,126 | 5/29/2020 |
2.1.2-beta0001 | 368 | 5/29/2020 |
2.1.1 | 1,257 | 3/1/2020 |
2.1.1-beta0001 | 400 | 3/1/2020 |
2.1.0 | 755 | 2/8/2020 |
2.1.0-beta0001 | 433 | 2/8/2020 |
2.1.0-alpha0004 | 454 | 2/8/2020 |
2.1.0-alpha0002 | 472 | 2/8/2020 |
2.0.0 | 1,212 | 1/14/2020 |
2.0.0-beta0001 | 380 | 1/14/2020 |
2.0.0-alpha0003 | 490 | 1/12/2020 |
1.1.0-alpha0002 | 388 | 11/18/2019 |
1.0.0 | 710 | 11/18/2019 |
1.0.0-beta0001 | 400 | 11/18/2019 |
0.3.0-alpha0011 | 389 | 11/9/2019 |
0.3.0-alpha0005 | 444 | 7/10/2019 |
0.3.0-alpha0002 | 420 | 7/6/2019 |
0.3.0-alpha0001 | 442 | 5/8/2019 |
0.2.0 | 1,733 | 2/5/2019 |
0.2.0-alpha0019 | 528 | 2/4/2019 |
0.2.0-alpha0018 | 520 | 2/4/2019 |
0.2.0-alpha0016 | 702 | 1/28/2019 |
0.2.0-alpha0013 | 710 | 1/27/2019 |
0.2.0-alpha0001 | 694 | 8/19/2018 |
0.1.0 | 1,006 | 8/19/2018 |
0.1.0-rc0024 | 691 | 8/19/2018 |
0.1.0-beta0001 | 717 | 8/19/2018 |