检索 HttpClient 服务不适用于 Blazor 客户端

Retrieving HttpClient service does not work with Blazor Client

我无法检索服务器在 Blazor 客户端中注入的默认值 HttpClient

配置

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);

                }
            }

P.S
为什么这段代码不能在 Blazor 客户端上运行,而在任何典型的 Asp Net Core 应用程序?

P.S 2 在通过首先将其添加到服务集合然后使用 GetService< > 解决了我给定服务的问题之后,我看到了这个不适用于 HttpClient。 所以服务器已经在 Client.Startup 中注入了 HttpClient;为什么我不能找回它?

public void ConfigureServices(IServiceCollection services)
{
              services.AddSingleton<MService>(); 


}

注意:您不应创建 ServiceProvider。它已经由代码创建。全部 你所要做的就是将你的对象添加到容器中。 顺便说一句,如果您确实创建了一个 ServiceProvider,则其中的 ConfigureServices 方法 它是应该 return 创建的,所以其他代码可以使用它。

不清楚为什么要访问ConfigureServices中的HttpClient服务 方法 !但是您可以执行以下操作: 1.Inject 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");
    }
}
  1. 从 ConfigureServices 中可访问的服务构建服务提供者 方法:

    public void ConfigureServices(IServiceCollection 服务) {

    IServiceProvider Services = services.BuildServiceProvider();
    var client = Services.GetRequiredService<HttpClient>();
    

    }

希望这对您有所帮助...