检索HttpClient服务不适用于Blazor Client

时间:2019-01-21 07:50:13

标签: c# asp.net-core blazor

我无法检索服务器在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;为什么我找不到它?

1 个答案:

答案 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");
    }
}
  1. 从ConfigureServices中可访问的服务中构建服务提供商 方法:

    public void ConfigureServices(IServiceCollection服务)  {

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

    }

希望这对您有帮助...