2017-02-10 1 views
6

Ich habe eine statische httpclient freigegeben über Anforderungen und ich möchte einen benutzerdefinierten Header hinzufügen.Aktualisieren benutzerdefinierter Header-Wert hinzugefügt als DefaultRequestHeaders von HttpClient

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

Aber ich habe festgestellt, dass bei jeder Anfrage der Wert zu dieser Kopfzeile hinzugefügt wird, die ich bei jeder Anfrage ersetzen möchte. Ich versuche, den Header zu entfernen, wenn es bereits vorhanden ist, und es erneut hinzuzufügen, aber es gibt mir einen Fehler Last Test.

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

Fehler -

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. 

Wie kann ich den benutzerdefinierten Header Wert auf jede Anfrage aktualisieren?

+1

fügt es nicht auf den 'DefaultRequestHeaders', sondern auf den tatsächlichen Antrag selbst? – Icepickle

+1

Das gleichzeitige Verwenden des HttpClient.DefaultRequestHeaders-Objekts (gleichzeitig) führt zu Problemen. Sie sollten Header über HttpRequestMessage verwalten. – levent

Antwort

1

Ich fügte Header zu tatsächlichen (aktuellen) Anfrage mit HttpRequestMessage und ersetzt einen Anruf mit SendAsync anstelle von GetAsync und es löste mein Problem. Danke @levent.

+0

irgendein Beispielcode vielleicht? –

0

Der Fehler war ich immer: An item with the same key has already been added. Key: x

Beispielcode für mahesh_ing Antwort:

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