HttpClient依赖注入配置BaseAddress不生效问题求助
问题分析与解决方案
你的问题出在命名HttpClient的注入方式错误:你在Program.cs中注册了名为ProductApi的命名HttpClient,但组件中直接用@inject HttpClient ProductApi的方式无法正确获取到这个配置好的客户端——这种注入方式会拿到默认的HttpClient实例,而非你自定义配置的命名实例。
正确实现步骤
1. 组件中注入IHttpClientFactory
替换原来的@inject HttpClient ProductApi,改为注入工厂类:
@inject IHttpClientFactory HttpClientFactory
2. 在方法中获取命名HttpClient实例
在GetProduct方法里,通过工厂创建你配置好的ProductApi客户端:
private async Task GetProduct() { var productApi = HttpClientFactory.CreateClient("ProductApi"); HttpResponseMessage response = await productApi.GetAsync("Product"); if (response.IsSuccessStatusCode) { var responseData = await response.Content.ReadFromJsonAsync<List<ProductModel>>(); products = responseData; } }
3. 确认Program.cs配置(无需修改)
你原来的Program.cs配置是正确的,保持不变即可:
builder.Services.AddHttpClient("ProductApi", client => { client.BaseAddress = new Uri("https://localhost:7023/api/"); });
补充说明
- 命名HttpClient由
IHttpClientFactory统一管理创建,直接注入HttpClient只会获取到未配置的默认实例。 - 如果是Blazor WebAssembly项目,检查是否有其他代码覆盖了HttpClient配置;如果是Blazor Server项目,确认服务注册顺序正确,没有后续代码修改
ProductApi的配置。
内容的提问来源于stack exchange,提问作者Nicholas Madero
相关产品推荐
相关产品推荐

