我在 .NET 8 上运行的 Blazor WebAssembly 应用程序遇到错误。该错误在应用程序启动时发生:
InvalidOperationException:无法为类型“SGC.Client.Layout.NavMenu”上的属性“Http”提供值。没有类型为“System.Net.Http.HttpClient”的已注册服务。
这是我在客户端的 Program.cs 文件:
var builder = WebAssemblyHostBuilder.CreateDefault(args);
builder.Services.AddHttpClient();
builder.Services.AddScoped(sp => new HttpClient { BaseAddress = new Uri(builder.HostEnvironment.BaseAddress) });
builder.Services.AddAuthorizationCore();
builder.Services.AddCascadingAuthenticationState();
builder.Services.AddSingleton<AuthenticationStateProvider, PersistentAuthenticationStateProvider>();
builder.Services.AddRadzenComponents();
builder.Services.AddScoped<DialogService>();
builder.Services.AddScoped<NotificationService>();
builder.Services.AddScoped<ContextMenuService>();
builder.Services.AddScoped<TooltipService>();
await builder.Build().RunAsync();
当我将 HttpClient 注入任何页面时都会发生该错误。例如:
@page "/example"
@inject HttpClient Http
<h3>Example Page</h3>
如何解决此问题并将 HttpClient 正确注入到我的 Blazor WebAssembly 应用程序中?
确保 HttpClient 已在 Program.cs 中的服务中注册。
您希望在创建 HttpClient 时使用 IHttpClientFactory,因为有一些底层代码可以管理套接字等的生命周期。您可以在此处阅读更多内容,以确定实现所需 DI 模式的最佳方式: