web-dev-qa-db-fra.com

Comment définir plusieurs en-têtes à l'aide de PostAsync en C #?

J'ai du code de travail:

using (var client = new HttpClient())
{
HttpResponseMessage response;
response = client.PostAsync(Url, new StringContent(Request, Encoding.UTF8, header)).Result;
}

// ce qui précède fonctionne très bien pour un en-tête simple, par exemple "application/json"

Que dois-je faire si je souhaite avoir plusieurs en-têtes? Par exemple. ajout de "myKey", "foo" pair et "Accept", "image/foo1"

Si j'essaie d'ajouter ce qui suit avant la ligne .Result, intellisense se plaint (le mot "en-têtes" est en rouge avec "Impossible de résoudre le symbole" en-têtes ""):

client.Headers.Add("myKey", "foo");
client.Headers.Add("Accept", "image/foo1");
16
n as

Vous pouvez accéder à la propriété Headers via la propriété StringContent :

var content = new StringContent(Request, Encoding.UTF8, header);
content.Headers.Add(...);

Ensuite, passez le StringContent à l'appel PostAsync:

response = client.PostAsync(Url, content).Result;
27
SwDevMan81

J'ai cessé d'utiliser les méthodes Post/Get * Async au profit de la méthode SendAsync(...) et HttpRequestMessage Send Async est le grand frère qui vous offre toute la flexibilité que vous ne pourriez pas obtenir autrement.

using System.Net.Http;

var httpRequestMessage = new HttpRequestMessage();

httpRequestMessage.Method = httpMethod;
httpRequestMessage.RequestUri = new Uri(url);

httpRequestMessage.Headers
                  .UserAgent
                  .Add(new Headers.ProductInfoHeaderValue(
                                              _applicationAssembly.Name, 
                                              _applicationAssembly.Version.ToString()));

HttpContent httpContent = new StringContent(json, Encoding.UTF8, "application/json");
switch (httpMethod.Method)
{
    case "POST":
        httpRequestMessage.Content = httpContent;
        break;
}

var result = await httpClient.SendAsync(httpRequestMessage);
result.EnsureSuccessStatusCode();
21
Mr. Young

Vous pouvez aussi utiliser

var client = new HttpClient();
client.DefaultRequestHeaders.TryAddWithoutValidation("headername","headervalue");

Si vous souhaitez simplement définir les en-têtes sur la classe HttpClient une seule fois. Voici les documents MSDN sur DefaultRequestHeaders.TryAddWithoutValidation

5
kmcnamee