web-dev-qa-db-ja.com

HttpClientFactory .net Core2.1を使用したリクエストごとの認証

HttpClientFactoryを使用して、呼び出しの時点でURIと資格情報が決定されるHttpClientのインスタンスを返すにはどうすればよいですか?

既存のコードは次のようになります。

var httpClientHandler = new HttpClientHandler()
    {
        Credentials = new NetworkCredential(userName, password),
    };
HttpClient client = new HttpClient(httpClientHandler);
client.BaseAddress = new Uri(_appSetting.ServiceURI);
4
Simon H

.net依存性注入を使用している場合は、1つのクラスの構成をセットアップコードに追加できます。

services
    .AddTransient<DataLoader>()
    .AddHttpClient<DataLoader>().ConfigurePrimaryHttpMessageHandler(() => new HttpClientHandler()
{
    Credentials = new NetworkCredential(LoadUsernameFromConfig(), LoadPasswordFromSecureLocation())
});

ここで追加すると、DIはこの資格情報を使用するHttpClientDataLoaderクラスに挿入します。

    public class DataLoader
    {
        private readonly HttpClient httpClient;

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

        public async Task LoadData(string tableName)
        {
            var json = await httpClient.GetStringAsync("https://protected.example.com/json");
            ...
        }
    }

Imran Arshad :ありがとう!からの回答がなければ、このコードを思い付くことができませんでした。

1
sschoof