我无法检索服务器在HttpClient
客户端中注入的默认Blazor
。
配置
public void ConfigureServices(IServiceCollection services)
{
try
{
ServiceProvider prov = services.BuildServiceProvider();
var returned = prov.GetRequiredService<HttpClient>();
if (returned == null) //returns null on Blazor Client
{
Console.WriteLine("is null");
}
else Console.WriteLine(not null httpclient);
}
catch (Exception ex)
{
Console.WriteLine(ex);
}
}
PS
为什么此代码在Blazor
客户端上不起作用,并且在任何典型的Asp Net Core
应用程序上都可以正常工作?
PS 2 解决了我给定服务的问题后,首先将其添加到服务集合中,然后使用GetService< >
,但我发现这不适用于HttpClient
。
因此,服务器已经在Client.Startup
中注入了HttpClient
;为什么我找不到它?
答案 0 :(得分:2)
public void ConfigureServices(IServiceCollection services)
{
services.AddSingleton<MService>();
}
注意:您不应创建ServiceProvider。它已经通过代码创建。所有 您要做的就是将对象添加到容器中。 顺便说一句,如果您确实创建了ServiceProvider,则其中的ConfigureServices方法 它创建后应该返回它,以便其他代码段可以使用它。
不清楚为什么要在ConfigureServices中访问HttpClient服务 方法 !但是,您可以执行以下操作: 1.注入IServiceProvider并像这样使用它:
@inject IServiceProvider services
@functions {
WeatherForecast[] forecasts;
protected override async Task OnInitAsync()
{
var client = services.GetRequiredService<HttpClient>();
forecasts = await client.GetJsonAsync<WeatherForecast[]>("/sample-data/weather.json");
}
}
从ConfigureServices中可访问的服务中构建服务提供商 方法:
public void ConfigureServices(IServiceCollection服务) {
IServiceProvider Services = services.BuildServiceProvider();
var client = Services.GetRequiredService<HttpClient>();
}
希望这对您有帮助...