Ogu.Compressions
2.1.1
dotnet add package Ogu.Compressions --version 2.1.1
NuGet\Install-Package Ogu.Compressions -Version 2.1.1
<PackageReference Include="Ogu.Compressions" Version="2.1.1" />
<PackageVersion Include="Ogu.Compressions" Version="2.1.1" />
<PackageReference Include="Ogu.Compressions" />
paket add Ogu.Compressions --version 2.1.1
#r "nuget: Ogu.Compressions, 2.1.1"
#addin nuget:?package=Ogu.Compressions&version=2.1.1
#tool nuget:?package=Ogu.Compressions&version=2.1.1
Ogu.Compressions
This library aggregates other Ogu.Compressions.* libraries and provides AddCompressions()
extension method to register all compressions.
Adding Package
dotnet add package Ogu.Compressions
Usage
Registering provider:
services.AddCompressions();
You can inject ICompressionProvider
to resolve compressions based on CompressionType
(enum) or encoding names like br
, gzip
, deflate
, snappy
, zstd
, none
.
Example:
private readonly ICompressionProvider _compressionProvider;
public BrotliController(ICompressionProvider compressionProvider)
{
_compressionProvider = compressionProvider;
}
To resolve Brotli:
var brotliCompression = _compressionProvider.GetCompression(CompressionType.Brotli);
Alternatively, you can inject the compression-specific interfaces directly:
private readonly IBrotliCompression _compression;
public BrotliController(IBrotliCompression compression)
{
_compression = compression;
}
Compress
string data = "Hello, World!";
bytes[] compressedData = await _compression.CompressAsync(data);
Decompress
bytes[] decompressedData = await _compression.DecompressAsync(compressedData);
string data = System.Text.Encoding.UTF8.GetString(decompressedData);
- Compress(..)
- CompressAsync(..)
- Decompress(..)
- DecompressAsync(..)
- CompressToStream(..)
- CompressToStreamAsync(..)
- DecompressToStream(..)
- DecompressToStreamAsync(..)
Other compression types and their interfaces:
- Deflate:
IDeflateCompression
- Snappy:
ISnappyCompression
- Zstd:
IZstdCompression
- Gzip:
IGzipCompression
- None:
INoneCompression
Adding Decompression Handler to HttpClient
Register DecompressionHandler
:
services.AddSingleton<DecompressionHandler>();
services.AddHttpClient("MySampleApiClient", httpClient =>
{
httpClient.BaseAddress = new Uri("http://....com");
// Inform the service that Brotli decompression is supported
CompressionType.Brotli.AddToRequestHeaders(httpClient.DefaultRequestHeaders);
}).AddHttpMessageHandler<DecompressionHandler>();
Register ICompressionProvider
for the handler:
services.AddCompressions();
Example usage:
public class MySampleApiClient : IMySampleApiClient
{
private readonly IHttpClientFactory _httpClientFactory;
public MySampleApiClient(IHttpClientFactory httpClientFactory)
{
_httpClientFactory = httpClientFactory;
}
public async Task<IEnumerable<Product>> GetProductsAsync(CancellationToken cancellationToken)
{
var httpClient = _httpClientFactory.CreateClient("MySampleApiClient");
return await httpClient.GetFromJsonAsync<Product[]>(cancellationToken: cancellationToken);
}
}
The DecompressionHandler
will automatically decompress the response if it recognizes the content encoding (like br
, gzip
, etc.). Unknown encodings will be skipped safely and you need to handle it.
Known Encoding Mappings
Encoding Name | CompressionType |
---|---|
brotli | CompressionType.Brotli |
br | CompressionType.Brotli |
deflate | CompressionType.Deflate |
snappy | CompressionType.Snappy |
zstandard | CompressionType.Zstd |
zstd | CompressionType.Zstd |
gzip | CompressionType.Gzip |
To customize mappings:
services.AddSingleton<ICompressionTypeResolver>(sp =>
new CompressionTypeResolver(new[] {
new KeyValuePair<string, CompressionType>("custom-brotli", CompressionType.Brotli)
}));
This lets you recognize specified aliases (like "custom-brotli" → CompressionType.Brotli) returned by the server. When you register your custom implementation, default encoding mappings won't be recognized.
Using Only Specific Algorithms
If you only need Brotli, install and register:
dotnet add package Ogu.Compressions.Brotli
services.AddBrotliCompression();
services.AddCompressionProvider();
You can customize configuration by passing action delegate:
services.AddBrotliCompression(options =>
{
options.Level = CompressionLevel.Optimal;
options.BufferSize = 4096;
});
Or configure via IOptions<BrotliCompressionOptions>
:
services.Configure<BrotliCompressionOptions>(options => { /* configure here */ });
Links:
Product | Versions Compatible and additional computed target framework versions. |
---|---|
.NET | net5.0 is compatible. net5.0-windows was computed. 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. net9.0 is compatible. 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 is compatible. |
.NET Standard | netstandard2.0 is compatible. netstandard2.1 is compatible. |
.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. |
-
.NETCoreApp 3.1
- Microsoft.Extensions.Options (>= 2.1.0)
- Ogu.Compressions.Brotli (>= 2.1.1)
- Ogu.Compressions.Brotli.Native (>= 2.1.1)
- Ogu.Compressions.Deflate (>= 2.1.1)
- Ogu.Compressions.Gzip (>= 2.1.1)
- Ogu.Compressions.None (>= 2.1.1)
- Ogu.Compressions.Snappy (>= 2.1.1)
- Ogu.Compressions.Zstd (>= 2.1.1)
-
.NETStandard 2.0
- Microsoft.Extensions.Options (>= 2.1.0)
- Ogu.Compressions.Brotli (>= 2.1.1)
- Ogu.Compressions.Brotli.Native (>= 2.1.1)
- Ogu.Compressions.Deflate (>= 2.1.1)
- Ogu.Compressions.Gzip (>= 2.1.1)
- Ogu.Compressions.None (>= 2.1.1)
- Ogu.Compressions.Snappy (>= 2.1.1)
- Ogu.Compressions.Zstd (>= 2.1.1)
-
.NETStandard 2.1
- Microsoft.Extensions.Options (>= 2.1.0)
- Ogu.Compressions.Brotli (>= 2.1.1)
- Ogu.Compressions.Brotli.Native (>= 2.1.1)
- Ogu.Compressions.Deflate (>= 2.1.1)
- Ogu.Compressions.Gzip (>= 2.1.1)
- Ogu.Compressions.None (>= 2.1.1)
- Ogu.Compressions.Snappy (>= 2.1.1)
- Ogu.Compressions.Zstd (>= 2.1.1)
-
net5.0
- Microsoft.Extensions.Options (>= 2.1.0)
- Ogu.Compressions.Brotli (>= 2.1.1)
- Ogu.Compressions.Brotli.Native (>= 2.1.1)
- Ogu.Compressions.Deflate (>= 2.1.1)
- Ogu.Compressions.Gzip (>= 2.1.1)
- Ogu.Compressions.None (>= 2.1.1)
- Ogu.Compressions.Snappy (>= 2.1.1)
- Ogu.Compressions.Zstd (>= 2.1.1)
-
net6.0
- Microsoft.Extensions.Options (>= 2.1.0)
- Ogu.Compressions.Brotli (>= 2.1.1)
- Ogu.Compressions.Brotli.Native (>= 2.1.1)
- Ogu.Compressions.Deflate (>= 2.1.1)
- Ogu.Compressions.Gzip (>= 2.1.1)
- Ogu.Compressions.None (>= 2.1.1)
- Ogu.Compressions.Snappy (>= 2.1.1)
- Ogu.Compressions.Zstd (>= 2.1.1)
-
net7.0
- Microsoft.Extensions.Options (>= 2.1.0)
- Ogu.Compressions.Brotli (>= 2.1.1)
- Ogu.Compressions.Brotli.Native (>= 2.1.1)
- Ogu.Compressions.Deflate (>= 2.1.1)
- Ogu.Compressions.Gzip (>= 2.1.1)
- Ogu.Compressions.None (>= 2.1.1)
- Ogu.Compressions.Snappy (>= 2.1.1)
- Ogu.Compressions.Zstd (>= 2.1.1)
-
net8.0
- Microsoft.Extensions.Options (>= 2.1.0)
- Ogu.Compressions.Brotli (>= 2.1.1)
- Ogu.Compressions.Brotli.Native (>= 2.1.1)
- Ogu.Compressions.Deflate (>= 2.1.1)
- Ogu.Compressions.Gzip (>= 2.1.1)
- Ogu.Compressions.None (>= 2.1.1)
- Ogu.Compressions.Snappy (>= 2.1.1)
- Ogu.Compressions.Zstd (>= 2.1.1)
-
net9.0
- Microsoft.Extensions.Options (>= 2.1.0)
- Ogu.Compressions.Brotli (>= 2.1.1)
- Ogu.Compressions.Brotli.Native (>= 2.1.1)
- Ogu.Compressions.Deflate (>= 2.1.1)
- Ogu.Compressions.Gzip (>= 2.1.1)
- Ogu.Compressions.None (>= 2.1.1)
- Ogu.Compressions.Snappy (>= 2.1.1)
- Ogu.Compressions.Zstd (>= 2.1.1)
NuGet packages (2)
Showing the top 2 NuGet packages that depend on Ogu.Compressions:
Package | Downloads |
---|---|
OpenSettings
OpenSettings is a .NET library for managing application settings efficiently. |
|
Ogu.AspNetCore.Compressions.Abstractions
This library defines unified interfaces for the Ogu.AspNetCore.Compressions.* libraries |
GitHub repositories
This package is not used by any popular GitHub repositories.