1. 程式人生 > >.NET 4.5(C#): 在HttpRequestHeaders中設定Basic驗證

.NET 4.5(C#): 在HttpRequestHeaders中設定Basic驗證

不同於之前的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 (varhttp=newHttpClient())

{

http.DefaultRequestHeaders.Authorization=newAuthenticationHeaderValue("Mgen""Orca");

//通過HttpHeaders.GetValues獲取值

Console.WriteLine(String.Join(", "http.DefaultRequestHeaders.GetValues("Authorization"

)));

}

輸出:

Mgen Orca

原來Authorization屬性會被設定成Scheme<空格>Parameter。

因此對於Basic驗證,可以使用這樣的方法來設定:

staticasyncvoiddoo()

{

using (varhttp=newHttpClient())

    {

SetBasicAuthorization(http.DefaultRequestHeaders"mgen""123456"Encoding.UTF8);

//後續操作省略

    }

}

staticvoidSetBasicAuthorization(HttpRequestHeadersheader

stringuserstringpassEncodingencoding)

{

//Base64編碼

vardata=Convert.ToBase64String(encoding.GetBytes(user+":"+pass));

//設定AuthenticationHeaderValue

header.Authorization=newAuthenticationHeaderValue("Basic"data);

}

上面是通過設定AuthenticationHeaderValue的。當然.NET中的HttpRequestHeader同樣允許直接修改原始的HTTP頭資料,通過HttpRequestHeader.Add方法,當然這樣很像.NET 4.5前的HttpWebRequest的設定方式:

staticvoidSetBasicAuthorization(HttpRequestHeadersheaderstringuserstringpassEncodingencoding)

{

//Base64編碼

vardata=Convert.ToBase64String(encoding.GetBytes(user+":"+pass));

//通過HttpRequestHeaders.Add

header.Add("Authorization""Basic "+data);

}

上述都會正確設定HTTP請求頭的Authorization欄位為Basic驗證方式。