Blazor .NET 8 WebAssembly如何正确注册HttpClient?
.NET 8 Blazor WebAssembly 正确注册 HttpClient 的方法
错误原因
你注册的是命名HttpClient(标识为"My.ServerAPI"),但组件中直接注入的是无命名的HttpClient服务,DI容器无法找到匹配的服务实例,因此抛出InvalidOperationException。
解决方案
方案1:注入命名HttpClient
修改组件中的注入代码,明确指定要注入的命名客户端:
// 原错误注入方式 // [Inject] // public HttpClient Http { get; set; } = default!; // 修改为指定命名客户端 [Inject] [FromKeyedServices("My.ServerAPI")] public HttpClient Http { get; set; } = default!;
方案2:注册默认(无命名)HttpClient
如果希望保持组件中直接注入HttpClient的方式不变,可修改Program.cs中的注册代码,注册默认HttpClient:
// 移除命名标识,注册默认HttpClient builder.Services.AddHttpClient(client => client.BaseAddress = new Uri(builder.HostEnvironment.BaseAddress)) .AddHttpMessageHandler<BaseAddressAuthorizationMessageHandler>();
补充说明
在Blazor WebAssembly的DI体系中,命名HttpClient和默认HttpClient是相互独立的服务,容器不会自动将命名客户端作为默认HttpClient实例提供,必须通过[FromKeyedServices]指定命名,或者直接注册无命名的默认客户端。
内容的提问来源于stack exchange,提问作者coolblue2000
相关产品推荐
相关产品推荐

