不同於之前的HttpWebRequest類型,在.NET 4.5中新的HttpRequestHeaders類型直接有一個Authorization屬性,對應類型是:AuthenticationHeaderValue,同樣在System.Net.Http.Headers命名空間內。AuthenticationHeaderValue有兩個屬性Parameter和Scheme。為了弄清這兩個參數在對Authorization屬性的作用,我們可以做一個簡單的測試:
首先得記得加入.NET 4.5中HttpClient相應的命名空間:
//+ using System.Net.Http;
//+ using System.Net.Http.Headers;
接著在DefaultRequestHeaders中設定AuthenticationHeaderValue,然後輸出Authorization的值:
using (var http = new HttpClient())
{
http.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Mgen", "Orca");
//通過HttpHeaders.GetValues擷取值
Console.WriteLine(String.Join(", ", http.DefaultRequestHeaders.GetValues("Authorization")));
}
輸出:
Mgen Orca
原來Authorization屬性會被設定成Scheme<空格>Parameter。
因此對於Basic驗證,可以使用這樣的方法來設定:
static async void doo()
{
using (var http = new HttpClient())
{
SetBasicAuthorization(http.DefaultRequestHeaders, "mgen", "123456", Encoding.UTF8);
//後續操作省略
}
}
static void SetBasicAuthorization(HttpRequestHeaders header, string user, string pass, Encoding encoding)
{
//Base64編碼
var data = Convert.ToBase64String(encoding.GetBytes(user + ":" + pass));
//設定AuthenticationHeaderValue
header.Authorization = new AuthenticationHeaderValue("Basic", data);
}
上面是通過設定AuthenticationHeaderValue的。當然.NET中的HttpRequestHeader同樣允許直接修改原始的HTTP頭資料,通過HttpRequestHeader.Add方法,當然這樣很像.NET 4.5前的HttpWebRequest的設定方式:
static void SetBasicAuthorization(HttpRequestHeaders header, string user, string pass, Encoding encoding)
{
//Base64編碼
var data = Convert.ToBase64String(encoding.GetBytes(user + ":" + pass));
//通過HttpRequestHeaders.Add
header.Add("Authorization", "Basic " + data);
}
上述都會正確設定HTTP要求標頭的Authorization欄位為Basic驗證方式。