2014-05-07 108 views
20

我目前使用System.Net.Http.HttpClient進行跨平臺支持。每個請求修改請求標頭C#HttpClient PCL

我讀過,爲每個請求實例化一個HttpClient對象並不是一個好習慣,並且您應該儘可能重用它。

現在我在爲服務編寫客戶端庫時遇到了問題。一些API調用需要有一個特定的頭,有些不必包含這個特定的頭。

看來,我只能操縱將與每個請求發送的「DefaultRequestHeaders」。

在使用例如實際請求時,是否有一個選項? 「client.PostAsync()」只修改特定請求的標題?

(信息:請求可以是多線程的)。

在此先感謝!

回答

39

是的,你可以創建一個新的HttpRequestMessage,設置你需要的所有屬性,然後將它傳遞給SendAsync。

var request = new HttpRequestMessage() { 
    RequestUri = new Uri("http://example.org"), 
    Method = HttpMethod.Post, 
    Content = new StringContent("Here is my content") 
} 
request.Headers.Accept.Add(...); // Set whatever headers you need to 

var response = await client.SendAsync(request); 
+0

@ user2864740這很奇怪。它應該存在於.net 4.5.1和PCL版本中https://msdn.microsoft.com/en-us/library/system.net.http.httpclient.sendasync(v=vs.118).aspx –

+1

哦,我的錯誤..我在看'Get..':} – user2864740

+1

@DarrelMiller當客戶端發出多個HttpRequestMessages時會發生什麼?例如,訪問令牌需要在頭文件中傳遞以打api,我發出請求然後發出請求(我們都是客戶站點的用戶) - HttpClient實例在請求之間共享,因爲它的靜態。可以說我的請求需要比您的更長的時間,這是否會導致問題? – crizzwald

1

使用HttpContent.Headers。只需創建具有所需標題的HttpContent實例並將其傳遞給PostAsync方法。

+1

這是行不通的,因爲標題是* request *標題,而不是內容標題。 – easuter