Reliable.HttpClient.Caching
1.4.0
dotnet add package Reliable.HttpClient.Caching --version 1.4.0
NuGet\Install-Package Reliable.HttpClient.Caching -Version 1.4.0
<PackageReference Include="Reliable.HttpClient.Caching" Version="1.4.0" />
<PackageVersion Include="Reliable.HttpClient.Caching" Version="1.4.0" />
<PackageReference Include="Reliable.HttpClient.Caching" />
paket add Reliable.HttpClient.Caching --version 1.4.0
#r "nuget: Reliable.HttpClient.Caching, 1.4.0"
#:package Reliable.HttpClient.Caching@1.4.0
#addin nuget:?package=Reliable.HttpClient.Caching&version=1.4.0
#tool nuget:?package=Reliable.HttpClient.Caching&version=1.4.0
Reliable.HttpClient.Caching
Intelligent HTTP response caching extension for Reliable.HttpClient with preset-based configuration, custom headers support, and automatic memory management.
Installation
dotnet add package Reliable.HttpClient.Caching
Quick Start
// Zero configuration - just add resilience with caching
services.AddHttpClient<WeatherApiClient>()
.AddResilienceWithMediumTermCache<WeatherResponse>(); // 10 minutes cache
// Configure default headers for all requests
services.AddHttpClient<ApiClient>()
.AddMemoryCache(options => options
.WithDefaultExpiry(TimeSpan.FromMinutes(5))
.AddHeader("Authorization", "Bearer token")
.AddHeader("X-API-Version", "1.0"));
// Use anywhere with per-request header customization
public class WeatherService(CachedHttpClient<WeatherResponse> client)
{
public async Task<WeatherResponse> GetWeatherAsync(string city) =>
await client.GetFromJsonAsync($"/weather?city={city}");
// Add custom headers per request
public async Task<WeatherResponse> GetWeatherWithTokenAsync(string city, string token)
{
var headers = new Dictionary<string, string>
{
["Authorization"] = $"Bearer {token}",
["X-Request-ID"] = Guid.NewGuid().ToString()
};
return await client.GetFromJsonAsync($"/weather?city={city}", headers);
}
}
Why This Package?
- Zero Configuration – Works out of the box with sensible defaults
- ✨ Custom Headers Support – Default headers + per-request header customization with smart cache key generation
- Preset-Based Setup – 6 ready-made configurations for common scenarios
- Automatic Dependencies – No need to manually register
IMemoryCache
- Combined APIs – Resilience + Caching in one method call
- Performance Optimized – Smart cache keys, configurable expiry, memory-efficient
Caching Approaches
This package provides two caching approaches:
🌐 Universal Caching
- Best for: Multiple response types in a single client
- Key class:
HttpClientWithCache
- Use case: Flexible, multi-type scenarios
🎯 Generic Caching
- Best for: Type-safe caching for specific response types
- Key class:
CachedHttpClient<TResponse>
- Use case: High-performance, type-safe scenarios
- 📚 See Generic Documentation →
🎯 Need help choosing? See our Choosing Guide
Ready-Made Presets
Choose from preset configurations for common scenarios:
// Short-term (1 minute) - frequently changing data
services.AddHttpClient<ApiClient>()
.AddShortTermCache<ApiResponse>();
// Medium-term (10 minutes) - moderately stable data
services.AddHttpClient<ApiClient>()
.AddMediumTermCache<ApiResponse>();
// Long-term (1 hour) - stable reference data
services.AddHttpClient<ApiClient>()
.AddLongTermCache<ApiResponse>();
Documentation
📖 Complete Documentation - Full caching guide with examples 🎯 Choosing Guide - Which approach to use when 📝 Examples - Real-world usage scenarios
License
This project is licensed under the MIT License - see the LICENSE file for details.
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 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 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. |
-
net6.0
- Microsoft.Extensions.Caching.Abstractions (>= 9.0.8)
- Microsoft.Extensions.Caching.Memory (>= 9.0.8)
- Microsoft.Extensions.DependencyInjection.Abstractions (>= 9.0.8)
- Microsoft.Extensions.Http (>= 9.0.8)
- Microsoft.Extensions.Logging.Abstractions (>= 9.0.8)
- Microsoft.Extensions.Options (>= 9.0.8)
- Reliable.HttpClient (>= 1.3.0)
-
net8.0
- Microsoft.Extensions.Caching.Abstractions (>= 9.0.8)
- Microsoft.Extensions.Caching.Memory (>= 9.0.8)
- Microsoft.Extensions.DependencyInjection.Abstractions (>= 9.0.8)
- Microsoft.Extensions.Http (>= 9.0.8)
- Microsoft.Extensions.Logging.Abstractions (>= 9.0.8)
- Microsoft.Extensions.Options (>= 9.0.8)
- Reliable.HttpClient (>= 1.3.0)
-
net9.0
- Microsoft.Extensions.Caching.Abstractions (>= 9.0.8)
- Microsoft.Extensions.Caching.Memory (>= 9.0.8)
- Microsoft.Extensions.DependencyInjection.Abstractions (>= 9.0.8)
- Microsoft.Extensions.Http (>= 9.0.8)
- Microsoft.Extensions.Logging.Abstractions (>= 9.0.8)
- Microsoft.Extensions.Options (>= 9.0.8)
- Reliable.HttpClient (>= 1.3.0)
NuGet packages (2)
Showing the top 2 NuGet packages that depend on Reliable.HttpClient.Caching:
Package | Downloads |
---|---|
KodySu.Client
Типобезопасный клиент для API kody.su (поиск информации по телефонным номерам). |
|
Planfact.KodySu.Client
Типобезопасный клиент для API kody.su (поиск информации по телефонным номерам). |
GitHub repositories
This package is not used by any popular GitHub repositories.
🎉 v1.4.0 Release - Dependency Injection Enhancement; Backward
Compatibility!
Major Bug Fix:
• Fixed HttpClientWithCache concrete type resolution from Dependency Injection container
(Issue #5)
• Both IHttpClientWithCache interface and HttpClientWithCache concrete type now resolvable
from DI
• Maintains complete backward compatibility with existing API signatures
• Scoped service registration to avoid captive dependencies with internal HttpClient
API Enhancements:
• AddHttpClientWithCache now supports both HttpCacheOptions and
Action<HttpCacheOptions>patterns
• Dual registration: services.GetService<HttpClientWithCache>() and
services.GetService<IHttpClientWithCache>() both work
• Same singleton instance returned for both interface and concrete type requests
• Comprehensive test coverage ensuring proper DI resolution behavior
Backward Compatible Overloads:
// Original API - preserved for backward compatibility
services.AddHttpClientWithCache("client", cacheOptions);
// New API - Action<T> configuration pattern
services.AddHttpClientWithCache("client", options => options.DefaultExpiry =
TimeSpan.FromMinutes(5));
Key Benefits:
• Access to HttpClientWithCache-specific members not exposed through IHttpClientWithCache
• Better integration with existing DI-based architectures
• Follows .NET dependency injection best practices
• Maintains performance and simplicity for basic scenarios
Previous Features (v1.3.0):
• Complete HTTP PATCH method support in HttpClientWithCache and CachedHttpClient<T>
• Intelligent cache invalidation for PATCH operations
• Full custom headers support matching main HttpClient module capabilities
• Per-request headers support in all HTTP methods (GET, POST, PUT, DELETE, PATCH)
• Intelligent cache key generation that includes headers for proper cache isolation
📚 Full documentation: https://github.com/akrisanov/Reliable.HttpClient
⚡ Breaking Changes: None - fully backward compatible