2017-02-10 346 views
6

我有一個靜態的httpclient跨請求共享,我想添加一個自定義標題。更新爲HttpClient DefaultRequestHeaders添加自定義標頭值

httpClient.DefaultRequestHeaders.Add("customHeader", somevalue.ToString()); 

但我注意到在每個請求中,值都被添加到我打算在每個請求中替換的頭部。我嘗試刪除標題,如果它已經存在,並再次添加,但它給我一個錯誤負載測試

if (httpClient.DefaultRequestHeaders.Contains("customHeader")) 
     { 
      httpClient.DefaultRequestHeaders.Remove("customHeader"); 
     } 
httpClient.DefaultRequestHeaders.Add("customHeader",somevalue.ToString()); 

錯誤 -

System.ArgumentException: An item with the same key has already been added. 
System.InvalidOperationException: Collection was modified; enumeration operation may not execute. 
System.ArgumentNullException: Value cannot be null. 

我怎麼可以更新每個請求的自定義頭值?

+1

不要將它添加到'DefaultRequestHeaders',但實際要求本身? – Icepickle

+1

同時使用HttpClient.DefaultRequestHeaders對象(併發)將導致問題。你應該通過HttpRequestMessage管理標題。 – levent

回答

1

我使用HttpRequestMessage向實際(當前)請求添加了標題,並用SendAsync而不是GetAsync替換了一個調用,並解決了我的問題。謝謝@levent。

+0

任何示例代碼可能? –

0

的錯誤我得到:An item with the same key has already been added. Key: x

示例代碼mahesh_ing答案:

var request = new HttpRequestMessage 
{ 
    Method = this.method, 
    RequestUri = new Uri(this.requestUri), 
}; 

request.Headers.Add("Key", "Value"); 

var client = new System.Net.Http.HttpClient 
{ 
    Timeout = this.timeout 
}; 

return await client.SendAsync(request);