Tôi đồng ý với câu trả lời của TheWhiteRợi nhưng nếu bạn có nhiều cuộc gọi sử dụng HttpClient thì theo tôi, mã này có vẻ hơi lặp lại.
Tôi nghĩ có 2 cách để cải thiện câu trả lời một chút.
Tạo một lớp trợ giúp để tạo ứng dụng khách:
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;
}
}
Sử dụng:
using(var client = ClientHelper.GetClient(username,password))
{
//Perform some http call
}
using(var client = ClientHelper.GetClient(token))
{
//Perform some http call
}
Tạo một phương thức mở rộng:
Không giành được giải thưởng sắc đẹp nhưng hoạt động tuyệt vời :)
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}")));
}
}
Sử dụng:
using (var client = new HttpClient())
{
client.DefaultRequestHeaders.Authorization = _username.ToAuthHeaderValue(_password);
}
Một lần nữa tôi nghĩ rằng 2 tùy chọn trên làm cho máy khách sử dụng câu lệnh ít lặp đi lặp lại. Hãy nhớ rằng cách tốt nhất để sử dụng lại HTTPClient nếu bạn thực hiện nhiều cuộc gọi http nhưng tôi nghĩ đó là một chút ngoài phạm vi cho câu hỏi này.