Как настроить несколько экземпляров HttpClient с разными конфигурациями в Blazor WebAssembly - PullRequest
0 голосов
/ 18 февраля 2020

Я пытаюсь настроить несколько URL-адресов API в классе Program.cs в Blazor WASM. Я не вижу расширения AddHttpClient, как на стороне сервера. Интересно, есть ли у кого-нибудь альтернативное решение для этого?

Вот что у меня так далеко:

var firstURI = new Uri("https://localhost:44340/");
var secondURI = new Uri("https://localhost:5001/");

void RegisterTypedClient<TClient, TImplementation>(Uri apiBaseUrl)
   where TClient : class where TImplementation : class, TClient
{
   builder.Services.AddHttpClient<TClient, TImplementation>(client =>
   {
       client.BaseAddress = apiBaseUrl;
   });
}

// HTTP services
RegisterTypedClient<IFirstService, FirstService>(firstURI);
RegisterTypedClient<ISecondService, SecondService>(secondURI);

1 Ответ

1 голос
/ 18 февраля 2020

Это можно сделать с помощью Blazor Client Side. Во-первых, в своем клиентском пакете получите следующий пакет nuget: Microsoft.Extensions.Http

Затем создайте два класса для этого примера (обычно вы используете интерфейс, но класс сам по себе должен работать здесь. Я собираюсь продемонстрировать использование двух разных базовых адресов, чтобы вы знали, что есть разница.

   public class GoogleService
    {
        private readonly HttpClient httpClient;

        public GoogleService(HttpClient httpClient)
        {
            this.httpClient = httpClient;
        }

        public string GetBaseUrl()
        {
            return httpClient.BaseAddress.ToString();
        }
    }

И служба Yahoo:

  public class YahooService
    {
        private readonly HttpClient httpClient;

        public YahooService(HttpClient httpClient)
        {
            this.httpClient = httpClient;
        }

        public string GetBaseUrl()
        {
            return httpClient.BaseAddress.ToString();
        }
    }

Далее, в Program.cs вашей клиентской программы вы можете сделать что-то вроде следующего:

public static async Task Main(string[] args)
        {
            var builder = WebAssemblyHostBuilder.CreateDefault(args);
            builder.RootComponents.Add<App>("app");

            builder.Services.AddHttpClient<GoogleService>(client =>
            {
                client.BaseAddress = new Uri("https://google.com/");
            });

            builder.Services.AddHttpClient<YahooService>(client =>
            {
                client.BaseAddress = new Uri("https://yahoo.com/");
            });

            await builder.Build().RunAsync();
        }

Затем вы можете добавить их в свой интерфейс таким образом и увидеть, что они действительно являются двумя разными внедренными клиентами. :

@page "/"
@inject BlazorHttpClientTest.Client.Clients.GoogleService googleService;
@inject BlazorHttpClientTest.Client.Clients.YahooService yahooService;

<h1>Hello, world!</h1>

<label>Google Address:</label><label>@googleAddress</label>
<label>Yahoo Address:</label><label>@yahooAddress</label>

@code{
    string googleAddress;
    string yahooAddress;

    protected override void OnInitialized()
    {
        base.OnInitialized();

        googleAddress = googleService.GetBaseUrl();
        yahooAddress = yahooService.GetBaseUrl();

    }
}

И вот так, у вас должно получиться, что оно работает:

enter image description here

Дайте мне знать, если я вам понадоблюсь объясните что-нибудь еще более подробно, в противном случае, отметьте как отвеченный, если это работает для вас.

...