2017-02-10 8 views
6

У меня есть статический httpclient, используемый для запросов, и я хочу добавить к нему один настраиваемый заголовок.Обновление пользовательского значения заголовка, добавленного как DefaultRequestHeaders HttpClient

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

Но я заметил, что по каждому запросу значение добавляется к этому заголовку, который я намерен заменить по каждому запросу. Я пытаюсь удалить заголовок, если он уже существует и добавить снова, но он дает мне ошибки на load test.

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);