Saya setuju dengan jawaban TheWhiteRabbit tetapi jika Anda memiliki banyak panggilan menggunakan HttpClient kodenya sepertinya sedikit berulang menurut pendapat saya.
Saya pikir ada 2 cara untuk meningkatkan jawabannya sedikit.
Buat kelas pembantu untuk membuat klien:
public static class ClientHelper
{
// Basic auth
public static HttpClient GetClient(string username,string password)
{
var authValue = new AuthenticationHeaderValue("Basic", Convert.ToBase64String(Encoding.UTF8.GetBytes($"{username}:{password}")));
var client = new HttpClient(){
DefaultRequestHeaders = { Authorization = authValue}
//Set some other client defaults like timeout / BaseAddress
};
return client;
}
// Auth with bearer token
public static HttpClient GetClient(string token)
{
var authValue = new AuthenticationHeaderValue("Bearer", token);
var client = new HttpClient(){
DefaultRequestHeaders = { Authorization = authValue}
//Set some other client defaults like timeout / BaseAddress
};
return client;
}
}
Pemakaian:
using(var client = ClientHelper.GetClient(username,password))
{
//Perform some http call
}
using(var client = ClientHelper.GetClient(token))
{
//Perform some http call
}
Buat metode ekstensi:
Tidak memenangkan hadiah kecantikan tapi berhasil :)
public static class HttpClientExtentions
{
public static AuthenticationHeaderValue ToAuthHeaderValue(this string username, string password)
{
return new AuthenticationHeaderValue("Basic",
Convert.ToBase64String(
System.Text.Encoding.ASCII.GetBytes(
$"{username}:{password}")));
}
}
Pemakaian:
using (var client = new HttpClient())
{
client.DefaultRequestHeaders.Authorization = _username.ToAuthHeaderValue(_password);
}
Sekali lagi saya pikir 2 opsi di atas membuat klien menggunakan pernyataan yang sedikit kurang berulang. Perlu diingat bahwa ini adalah praktik terbaik untuk menggunakan kembali HttpClient jika Anda membuat beberapa panggilan http tapi saya pikir itu sedikit di luar ruang lingkup untuk pertanyaan ini.