AddHttpClient configuration is never executed
I want to register HttpClient in DI container to use it in service to send request to other api. The
Here I register
Here I register services
Here is a class that implements
And here how I use class
configureHttpClientconfigureHttpClient is not executed and configuration values are not set in the HttpClient and I get error that I can't send request because baseAddressbaseAddress is not set.Here I register
HttpClientHttpClient for ILocationService,NominatimLocationServiceILocationService,NominatimLocationServicebuilder.Services.AddHttpClient<ILocationService,NominatimLocationService>()
.ConfigureHttpClient(client =>
{
client.BaseAddress = new Uri("https://nominatim.openstreetmap.org");
client.DefaultRequestHeaders.UserAgent.ParseAdd("Mozilla/5.0 (compatible; AcmeInc/1.0)");
});builder.Services.AddHttpClient<ILocationService,NominatimLocationService>()
.ConfigureHttpClient(client =>
{
client.BaseAddress = new Uri("https://nominatim.openstreetmap.org");
client.DefaultRequestHeaders.UserAgent.ParseAdd("Mozilla/5.0 (compatible; AcmeInc/1.0)");
});Here I register services
services.AddScoped<ILocationService, NominatimLocationService>();services.AddScoped<ILocationService, NominatimLocationService>();Here is a class that implements
ILocationServiceILocationServicepublic class NominatimLocationService:ILocationService
{
private readonly HttpClient _httpClient;
public NominatimLocationService(HttpClient httpClient)
{
_httpClient = httpClient;
}
public async Task<IEnumerable<LocationResponse>> FindByQueryAsync(string query)
{
// https://nominatim.openstreetmap.org/search.php?q=tes&format=jsonv2
HttpResponseMessage responseMessage = await _httpClient.GetAsync($"search.php?q={query}&format=jsonv2");
...
}
}public class NominatimLocationService:ILocationService
{
private readonly HttpClient _httpClient;
public NominatimLocationService(HttpClient httpClient)
{
_httpClient = httpClient;
}
public async Task<IEnumerable<LocationResponse>> FindByQueryAsync(string query)
{
// https://nominatim.openstreetmap.org/search.php?q=tes&format=jsonv2
HttpResponseMessage responseMessage = await _httpClient.GetAsync($"search.php?q={query}&format=jsonv2");
...
}
}And here how I use class
public class LocationsController : ControllerBase
{
private readonly ILocationService _locationService;
public LocationsController(ILocationService locationService)
{
_locationService = locationService;
}
[HttpGet("search")]
public async Task<IActionResult> Search([FromQuery] string? query)
{
if(string.IsNullOrEmpty(query))
{
throw new BadRequestException("Search parameter 'query' is required");
}
IEnumerable<LocationResponse> locations = await _locationService.FindByQueryAsync(query);
return Ok(locations);
}
}public class LocationsController : ControllerBase
{
private readonly ILocationService _locationService;
public LocationsController(ILocationService locationService)
{
_locationService = locationService;
}
[HttpGet("search")]
public async Task<IActionResult> Search([FromQuery] string? query)
{
if(string.IsNullOrEmpty(query))
{
throw new BadRequestException("Search parameter 'query' is required");
}
IEnumerable<LocationResponse> locations = await _locationService.FindByQueryAsync(query);
return Ok(locations);
}
}