Je ne parviens pas à définir le type de contenu sur HttpClient . J'ai suivi cette question: Comment définir l'en-tête Content-Type pour une demande HttpClient? Mais toujours pas de chance.
String rcString = JsonConvert.SerializeObject(new RoadsmartChecks() { userguid = user_guid, coords = coordinates, radius = (radius * 100) + "" }, ROADSMART_JSON_FORMAT, JSONNET_SETTINGS);
HttpClient c = new HttpClient();
c.BaseAddress = new Uri(BASE_URL);
c.DefaultRequestHeaders.TryAddWithoutValidation("Content-Type", "application/json"); //Keeps returning false
c.DefaultRequestHeaders.TryAddWithoutValidation("Authorization", hash_aes);
c.DefaultRequestHeaders.TryAddWithoutValidation("Roadsmart-app", Constant.APP_ID);
c.DefaultRequestHeaders.TryAddWithoutValidation("Roadsmart-user", user_guid);
c.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));
HttpRequestMessage req = new HttpRequestMessage(HttpMethod.Post, BASE_URL + URL_CHECKS + "/fetch");
req.Content = new StringContent(rcString);
await c.SendAsync(req).ContinueWith(respTask =>
{
Debug.WriteLine("Response: {0}", respTask.Result);
});
J'ai également essayé d'utiliser la bibliothèque Flurl, mais elle se bloque lorsque j'essaie d'ajouter le 'Content-Type'.
misused header name content-type
Alors, comment puis-je le forcer pour qu’il l’ajoute vraiment? Merci d’avance.
Je pense que tu devrais essayer ça
req.Content = new StringContent(rcString, Encoding.UTF8, "application/json");
checkout this links:
Comment définissez-vous l'en-tête Content-Type pour une demande HttpClient?
Supprimer cette ligne c.DefaultRequestHeaders.TryAddWithoutValidation("Content-Type", "application/json");
et vérifier
UPDATE: voir nouvelle réponse pour les types de contenu autres que ceux par défaut
Avec Flurl, vous n'avez pas besoin de définir Content-Type sur application/json pour des méthodes telles que PostJsonAsync
. Dans ce cas, il s’agit du type de contenu par défaut qui sera défini pour vous.
La dernière et meilleure réponse à cela avec Flurl est de upgrade . 2.0 introduit plusieurs améliorations dans le département des en-têtes:
Ils ne sont plus validés. Flurl utilise maintenant TryAddWithoutValidation
sous le capot, de sorte que vous n'aurez jamais l'erreur "nom d'en-tête mal utilisé" avec les méthodes WithHeader(s)
. (J'ai toujours trouvé que le comportement de validation était un peu surprotecteur.)
Dans un appel fluide, ils sont définis au niveau de la demande individuelle plutôt qu'au niveau FlurlClient
, de sorte que vous ne rencontrez pas problèmes de simultanéité lors de la réutilisation du client.
Les traits d'union étant courants dans les noms d'en-tête mais non autorisés dans les identificateurs C #, il existe une nouvelle convention où les traits de soulignement sont convertis en traits d'union, vous n'avez donc pas à abandonner la notation d'objet lorsque vous spécifiez plusieurs:
url.WithHeaders(new { Content_Type = "foo", ... }