2017-02-10 33 views
6

Mam statyczny httpclient wspólny dla żądań i chcę dodać do niego jeden niestandardowy nagłówek.Aktualizowanie niestandardowej wartości nagłówka dodanej jako DefaultRequestHeaders z HttpClient

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

Ale zauważyłem, że na każde żądanie wartość jest dodawana do tego nagłówka, który zamierzam zamienić na każde żądanie. Próbuję usunąć nagłówek, jeśli już istnieje i dodać ponownie, ale daje mi błąd na obciążenia testu.

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

Błędy -

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. 

Jak mogę zaktualizować wartość niestandardowy nagłówek na każde żądanie?

+1

nie dodać go do 'DefaultRequestHeaders', ale do rzeczywistej samą prośbę? – Icepickle

+1

Korzystanie z obiektu HttpClient.DefaultRequestHeaders w tym samym czasie (współbieżnie) spowoduje problemy. powinieneś zarządzać nagłówkami poprzez HttpRequestMessage. – levent

Odpowiedz

1

Dodałem nagłówek do faktycznego (bieżącego) żądania za pomocą HttpRequestMessage i zastąpiłem wywołanie SendAsync zamiast GetAsync i rozwiązało to mój problem. Dzięki @levent.

+0

może być przykładowy kod? –

0

Błąd ja trafiałem: An item with the same key has already been added. Key: x

Przykładowy kod dla mahesh_ing odpowiedź:

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