Ich stimme der Antwort von TheWhiteRabbit zu, aber wenn Sie viele Anrufe mit HttpClient haben, scheint sich der Code meiner Meinung nach etwas zu wiederholen.
Ich denke, es gibt zwei Möglichkeiten, die Antwort ein wenig zu verbessern.
Erstellen Sie eine Hilfsklasse, um den Client zu erstellen:
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;
}
}
Verwendungszweck:
using(var client = ClientHelper.GetClient(username,password))
{
//Perform some http call
}
using(var client = ClientHelper.GetClient(token))
{
//Perform some http call
}
Erstellen Sie eine Erweiterungsmethode:
Gewinnt keinen Schönheitspreis, funktioniert aber großartig :)
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}")));
}
}
Verwendungszweck:
using (var client = new HttpClient())
{
client.DefaultRequestHeaders.Authorization = _username.ToAuthHeaderValue(_password);
}
Wiederum denke ich, dass 2 der oben genannten Optionen den Client mit der Anweisung etwas weniger repetitiv machen. Denken Sie daran, dass es empfehlenswert ist, den HttpClient wiederzuverwenden, wenn Sie mehrere http-Aufrufe tätigen, aber ich denke, dass dies für diese Frage etwas unumgänglich ist.