HttpClientFactoryを使用して、呼び出しの時点でURIと資格情報が決定されるHttpClientのインスタンスを返すにはどうすればよいですか?
既存のコードは次のようになります。
var httpClientHandler = new HttpClientHandler()
{
Credentials = new NetworkCredential(userName, password),
};
HttpClient client = new HttpClient(httpClientHandler);
client.BaseAddress = new Uri(_appSetting.ServiceURI);
.net依存性注入を使用している場合は、1つのクラスの構成をセットアップコードに追加できます。
services
.AddTransient<DataLoader>()
.AddHttpClient<DataLoader>().ConfigurePrimaryHttpMessageHandler(() => new HttpClientHandler()
{
Credentials = new NetworkCredential(LoadUsernameFromConfig(), LoadPasswordFromSecureLocation())
});
ここで追加すると、DIはこの資格情報を使用するHttpClient
をDataLoader
クラスに挿入します。
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 :ありがとう!からの回答がなければ、このコードを思い付くことができませんでした。