Как добавить индивидуальную конфигурацию для AddHttpClient? - PullRequest
0 голосов
/ 08 марта 2020

Я использую следующий код в Startup.cs для настройки моего HttpClient

services.AddHttpClient<MyHttpClient>(httpClient =>
    {
        httpClient.BaseAddress = new Uri(mySiteAddress);
        httpClient.DefaultRequestHeaders.Authorization =
            new System.Net.Http.Headers.AuthenticationHeaderValue(
            "Bearer",
            "???");
    });

Мой код выше работает, когда я заменяю "???" на рабочий токен ,

Но это означает, что все пользователи приложения будут отправлять запросы с одним и тем же токеном. Я хочу использовать их отдельные токены, которые я имею в своем распоряжении как string в своих контроллерах.

Я мог бы заставить все мои клиентские методы принимать токен в качестве параметра, но есть ли способ устранить эту избыточность ?

Я мог бы создать метод "SetToken ()", который нужно вызывать один раз для каждого экземпляра и перед выполнением запросов, но это кажется неправильным.

1 Ответ

0 голосов
/ 08 марта 2020

Вы можете использовать одну из AddHttpClient перегрузок , когда делегат конфигурации имеет доступ к IServiceProvider. Однако для этого требуется именованный обработчик, который вы уже делаете, имея собственный клиент (MyHttpClient)

services.AddHttpClient<MyHttpClient>((serviceProvider, httpClient) => {

    var someService = servideProvider.GetService<ISomeService>();

    httpClient.BaseAddress = new Uri(mySiteAddress);
    httpClient.DefaultRequestHeaders.Authorization =
        new System.Net.Http.Headers.AuthenticationHeaderValue(
            "Bearer",
            someService.GetTokem()); //<--
});

Но я не совсем уверен, насколько это жизнеспособно, поскольку возможно, что пользователь может не иметь к моменту вызова этого делегата.

...