2017-02-15 7 views
1

Ich habe ein HttpClient, die über mehrere Threads gemeinsam genutzt wird:Wie stellt Httpheader auf individuelle Anforderung mit Httpclient

public static class Connection 
{ 
    public static HttpClient Client { get; } 

    static Connection() 
    { 
     Client = new HttpClient 
     { 
      BaseAddress = new Uri(Config.APIUri) 
     }; 

     Client.DefaultRequestHeaders.Add("Connection", "Keep-Alive"); 
     Client.DefaultRequestHeaders.Add("Keep-Alive", "timeout=600"); 
     Client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json")); 
    } 
} 

Es einige Standard-Header hat ich auf jede Anforderung gestellt. Allerdings, wenn ich es verwenden, möchte ich für nur auf einem Header hinzufügen, die anfordern:

var client = Connection.Client; 
StringContent httpContent = new StringContent(myQueueItem, Encoding.UTF8, "application/json"); 

httpContent.Headers.Add("Authorization", "Bearer " + accessToken); // <-- Header for this and only this request 
HttpResponseMessage response = await client.PostAsync("/api/devices/data", httpContent); 
response.EnsureSuccessStatusCode(); 

string json = await response.Content.ReadAsStringAsync(); 

Wenn ich das tue, erhalte ich die Ausnahme:

{ "Misused Header-Namen. Stellen Sie sicher, Request-Header mit HttpRequestMessage, Response-Header mit HttpResponseMessage und Inhalt Header mit HttpContent Objekten. "}

ich nicht finden konnten, andere Möglichkeit, Anforderungsheader zu dieser Anfrage hinzuzufügen. Wenn ich die DefaultRequestHeaders auf Client ändere, stoße ich auf Thread-Probleme und müsste alle Arten von verrückten Sperren implementieren.

Irgendwelche Ideen?

Antwort

1

Sie können SendAsync verwenden, um eine HttpRequestMessage zu senden.

In der Nachricht können Sie die uri, method, content und headers einrichten.

Beispiel:

HttpRequestMessage msg = new HttpRequestMessage(HttpMethod.Post, "/api/devices/data"); 
msg.Headers.Authorization = new AuthenticationHeaderValue("Bearer", accessToken); 
msg.Content = new StringContent(myQueueItem, Encoding.UTF8, "application/json"); 

HttpResponseMessage response = await client.SendAsync(msg); 
response.EnsureSuccessStatusCode(); 

string json = await response.Content.ReadAsStringAsync(); 
+1

Awesome! Das funktioniert. Ich habe meiner Antwort auch meinen Arbeitscode hinzugefügt. '+ 1' –

Verwandte Themen