Listen to this Post
The recommended approach for creating `HttpClient` instances in .NET is by using IHttpClientFactory
. This helps manage `HttpClient` lifecycle efficiently and avoids common pitfalls like socket exhaustion.
Using IHttpClientFactory Directly
You can inject `IHttpClientFactory` into your services and create clients dynamically:
var client = _httpClientFactory.CreateClient();
However, this requires manual configuration each time.
Named or Typed Clients for Pre-Configured HttpClients
For better reusability, use named clients:
services.AddHttpClient("GitHubClient", client => { client.BaseAddress = new Uri("https://api.github.com/"); client.DefaultRequestHeaders.Add("Accept", "application/json"); });
Or typed clients for strongly-typed configurations:
services.AddHttpClient<GitHubService>(client => { client.BaseAddress = new Uri("https://api.github.com/"); });
You Should Know:
1. Avoid `HttpClient` Disposal Issues
- Using `new HttpClient()` improperly can lead to socket exhaustion.
- Always prefer `IHttpClientFactory` in ASP.NET Core.
2. Configure Retry Policies with Polly
services.AddHttpClient("ResilientClient") .AddTransientHttpErrorPolicy(policy => policy.RetryAsync(3));
3. Monitor HTTP Calls
Use tools like Wireshark or Fiddler to debug HTTP traffic:
tcpdump -i any -w http_traffic.pcap port 80 or port 443
4. Linux Alternative: `curl` for Testing
curl -X GET https://api.github.com/users/dotnet -H "Accept: application/json"
5. Windows PowerShell HTTP Requests
Invoke-RestMethod -Uri "https://api.github.com/users/dotnet" -Headers @{"Accept"="application/json"}
What Undercode Say:
Using `IHttpClientFactory` ensures optimal HTTP resource management in .NET. For advanced scenarios, combine it with Polly for resilience and Refit for API abstraction. Always monitor HTTP calls in production to detect issues early.
Expected Output:
A well-configured `HttpClient` with retries, logging, and efficient resource handling.
Reference: The Right Way to Use HttpClient in .NET
References:
Reported By: Milan Jovanovic – Hackers Feeds
Extra Hub: Undercode MoN
Basic Verification: Pass ✅