IHttpClientFactory — manages HttpClient lifecycle and resilience.
Problem:
Setup:
1// Program.cs2builder.Services.AddHttpClient<IUserService, UserService>(client =>3{4 client.BaseAddress = new Uri("https://api.example.com");5 client.DefaultRequestHeaders.Add("Accept", "application/json");6});
Typed client:
1public class UserService2{3 private readonly HttpClient _client;45 public UserService(HttpClient client)6 {7 _client = client;8 }910 public async Task<User> GetUserAsync(int id)11 {12 return await _client.GetFromJsonAsync<User>($"/users/{id}");13 }14}
With Polly (resilience):
1builder.Services.AddHttpClient<IUserService, UserService>()2 .AddPolicyHandler(Policy3 .Handle<HttpRequestException>()4 .WaitAndRetryAsync(3, retryAttempt =>5 TimeSpan.FromSeconds(Math.Pow(2, retryAttempt))));
Benefits: