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