Zgadzam się z odpowiedzią TheWhiteRabbit, ale jeśli masz dużo połączeń za pomocą HttpClient, kod wydaje mi się nieco powtarzalny.
Myślę, że istnieją 2 sposoby, aby nieco poprawić odpowiedź.
Utwórz klasę pomocnika, aby utworzyć klienta:
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;
}
}
Stosowanie:
using(var client = ClientHelper.GetClient(username,password))
{
//Perform some http call
}
using(var client = ClientHelper.GetClient(token))
{
//Perform some http call
}
Utwórz metodę rozszerzenia:
Nie wygrywa nagrody za urodę, ale działa świetnie :)
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}")));
}
}
Stosowanie:
using (var client = new HttpClient())
{
client.DefaultRequestHeaders.Authorization = _username.ToAuthHeaderValue(_password);
}
Ponownie myślę, że 2 powyższe opcje sprawiają, że klient używa instrukcji nieco mniej powtarzalny. Pamiętaj, że najlepszą praktyką jest ponowne użycie klienta HttpClient, jeśli wykonujesz wiele połączeń HTTP, ale myślę, że to trochę poza zakresem tego pytania.