Ogu.Compressions
2.1.2
dotnet add package Ogu.Compressions --version 2.1.2
NuGet\Install-Package Ogu.Compressions -Version 2.1.2
<PackageReference Include="Ogu.Compressions" Version="2.1.2" />
<PackageVersion Include="Ogu.Compressions" Version="2.1.2" />
<PackageReference Include="Ogu.Compressions" />
paket add Ogu.Compressions --version 2.1.2
#r "nuget: Ogu.Compressions, 2.1.2"
#:package Ogu.Compressions@2.1.2
#addin nuget:?package=Ogu.Compressions&version=2.1.2
#tool nuget:?package=Ogu.Compressions&version=2.1.2
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.AddTransient<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.2)
- Ogu.Compressions.Brotli.Native (>= 2.1.2)
- Ogu.Compressions.Deflate (>= 2.1.2)
- Ogu.Compressions.Gzip (>= 2.1.2)
- Ogu.Compressions.None (>= 2.1.2)
- Ogu.Compressions.Snappy (>= 2.1.2)
- Ogu.Compressions.Zstd (>= 2.1.2)
-
.NETStandard 2.0
- Microsoft.Extensions.Options (>= 2.1.0)
- Ogu.Compressions.Brotli (>= 2.1.2)
- Ogu.Compressions.Brotli.Native (>= 2.1.2)
- Ogu.Compressions.Deflate (>= 2.1.2)
- Ogu.Compressions.Gzip (>= 2.1.2)
- Ogu.Compressions.None (>= 2.1.2)
- Ogu.Compressions.Snappy (>= 2.1.2)
- Ogu.Compressions.Zstd (>= 2.1.2)
-
.NETStandard 2.1
- Microsoft.Extensions.Options (>= 2.1.0)
- Ogu.Compressions.Brotli (>= 2.1.2)
- Ogu.Compressions.Brotli.Native (>= 2.1.2)
- Ogu.Compressions.Deflate (>= 2.1.2)
- Ogu.Compressions.Gzip (>= 2.1.2)
- Ogu.Compressions.None (>= 2.1.2)
- Ogu.Compressions.Snappy (>= 2.1.2)
- Ogu.Compressions.Zstd (>= 2.1.2)
-
net5.0
- Microsoft.Extensions.Options (>= 2.1.0)
- Ogu.Compressions.Brotli (>= 2.1.2)
- Ogu.Compressions.Brotli.Native (>= 2.1.2)
- Ogu.Compressions.Deflate (>= 2.1.2)
- Ogu.Compressions.Gzip (>= 2.1.2)
- Ogu.Compressions.None (>= 2.1.2)
- Ogu.Compressions.Snappy (>= 2.1.2)
- Ogu.Compressions.Zstd (>= 2.1.2)
-
net6.0
- Microsoft.Extensions.Options (>= 2.1.0)
- Ogu.Compressions.Brotli (>= 2.1.2)
- Ogu.Compressions.Brotli.Native (>= 2.1.2)
- Ogu.Compressions.Deflate (>= 2.1.2)
- Ogu.Compressions.Gzip (>= 2.1.2)
- Ogu.Compressions.None (>= 2.1.2)
- Ogu.Compressions.Snappy (>= 2.1.2)
- Ogu.Compressions.Zstd (>= 2.1.2)
-
net7.0
- Microsoft.Extensions.Options (>= 2.1.0)
- Ogu.Compressions.Brotli (>= 2.1.2)
- Ogu.Compressions.Brotli.Native (>= 2.1.2)
- Ogu.Compressions.Deflate (>= 2.1.2)
- Ogu.Compressions.Gzip (>= 2.1.2)
- Ogu.Compressions.None (>= 2.1.2)
- Ogu.Compressions.Snappy (>= 2.1.2)
- Ogu.Compressions.Zstd (>= 2.1.2)
-
net8.0
- Microsoft.Extensions.Options (>= 2.1.0)
- Ogu.Compressions.Brotli (>= 2.1.2)
- Ogu.Compressions.Brotli.Native (>= 2.1.2)
- Ogu.Compressions.Deflate (>= 2.1.2)
- Ogu.Compressions.Gzip (>= 2.1.2)
- Ogu.Compressions.None (>= 2.1.2)
- Ogu.Compressions.Snappy (>= 2.1.2)
- Ogu.Compressions.Zstd (>= 2.1.2)
-
net9.0
- Microsoft.Extensions.Options (>= 2.1.0)
- Ogu.Compressions.Brotli (>= 2.1.2)
- Ogu.Compressions.Brotli.Native (>= 2.1.2)
- Ogu.Compressions.Deflate (>= 2.1.2)
- Ogu.Compressions.Gzip (>= 2.1.2)
- Ogu.Compressions.None (>= 2.1.2)
- Ogu.Compressions.Snappy (>= 2.1.2)
- Ogu.Compressions.Zstd (>= 2.1.2)
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.