ฉันเห็นด้วยกับคำตอบของ 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 ตัวเลือกด้านบนทำให้ลูกค้าที่ใช้คำสั่งซ้ำเล็กน้อยน้อย โปรดทราบว่าเป็นวิธีปฏิบัติที่ดีที่สุดในการใช้ HttpClient อีกครั้งหากคุณใช้การโทร http หลายรายการ แต่ฉันคิดว่าคำถามนี้ไม่ดีพอ