Type de support non pris en charge dans l'appel httpclient c #
J'essaie de publier la demande suivante mais j'obtiens une réponse "Type de support non pris en charge". Je règle le Content-Type sur application / json. Toute aide serait appréciée. Et selon le commentaire ci-dessous, si je change le contenu en tant que 'new StringContent (JsonConvert.SerializeObject (root), Encoding.UTF8, "application / json")' alors j'obtiens une mauvaise réponse à la demande
string URL = "https://test.com/api/v2/orders/"; //please note it is dummy api endpoint
var client = new HttpClient();
var httpRequestMessage = new HttpRequestMessage
{
Method = HttpMethod.Post,
RequestUri = new Uri(URL),
Headers = {
{ HttpRequestHeader.Authorization.ToString(), "Bearer ABcdwenlfbl8HY0aGO9Z2NacFj1234" }, //please note it is dummy bearer token
{ HttpRequestHeader.Accept.ToString(), "application/json;indent=2" },
{ HttpRequestHeader.ContentType.ToString(), "application/json" }
},
//Content =new StringContent(JsonConvert.SerializeObject(root), Encoding.UTF8, "application/json")
Content = new StringContent(Newtonsoft.Json.JsonConvert.SerializeObject(root))
};
var response = client.SendAsync(httpRequestMessage).Result;
Réponses
Avec HttpClient, certains en-têtes sont comptés comme des en-têtes de demande et d'autres comme des en-têtes de contenu. Je ne sais pas pourquoi ils ont fait cette distinction, mais l'essentiel est que vous devez ajouter des en-têtes au bon endroit.
Dans le cas de Content-Type, cela peut être ajouté dans le cadre du StringContentconstructeur ou de l' StringContentobjet construit .
Mon approche consiste à utiliser le constructeur:
Content = new StringContent(Newtonsoft.Json.JsonConvert.SerializeObject(root), System.Text.Encoding.UTF8, "application/json");
Ou définissez-le ensuite:
Content = new StringContent(Newtonsoft.Json.JsonConvert.SerializeObject(root))
Content.Headers.ContentType = new MediaTypeHeaderValue("application/json");
Remarque: si votre problème persiste après avoir effectué cette modification, il s'agit probablement d'un problème côté serveur et vous devrez contacter le responsable de l'API pour lui demander ce que vous faites de mal.
Je préfère utiliser des wrappers tiers comme FluentClient. Notez que vous ne devez pas créer d'instance d'un nouvel objet pour chaque requête, O ne l'a fait qu'à titre d'exemple.
var client = new FluentClient("https://test.com/api/v2/orders/")
.PostAsync(URI)
.WithBody(root)
.WithBearerAuthentication("ABcdwenlfbl8HY0aGO9Z2NacFj1234");
var response = await client.AsResponse();