मैं TheWhiteRabbit के उत्तर से सहमत हूं, लेकिन यदि आपके पास HttpClient का उपयोग करने वाले बहुत सारे कॉल हैं, तो कोड मेरी राय में थोड़ा दोहरावदार लगता है।
मुझे लगता है कि उत्तर को थोड़ा सुधारने के 2 तरीके हैं।
ग्राहक बनाने के लिए एक सहायक वर्ग बनाएँ:
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;
}
}
उपयोग:
using(var client = ClientHelper.GetClient(username,password))
{
//Perform some http call
}
using(var client = ClientHelper.GetClient(token))
{
//Perform some http call
}
एक विस्तार विधि बनाएँ:
एक सौंदर्य पुरस्कार नहीं जीतता है लेकिन महान काम करता है :)
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}")));
}
}
उपयोग:
using (var client = new HttpClient())
{
client.DefaultRequestHeaders.Authorization = _username.ToAuthHeaderValue(_password);
}
फिर से मुझे लगता है कि ऊपर दिए गए 2 विकल्प ग्राहक को कथन का उपयोग कम दोहरावदार बनाते हैं। ध्यान रखें कि यदि आप कई http कॉल कर रहे हैं तो HttpClient का पुन: उपयोग करना सबसे अच्छा अभ्यास है, लेकिन मुझे लगता है कि इस प्रश्न के लिए यह थोड़ा गुंजाइश है।