Tipo di supporto non supportato nella chiamata httpclient c #
Sto tentando di inviare la seguente richiesta ma ricevo una risposta "Tipo di supporto non supportato". Sto impostando Content-Type su application / json. Qualsiasi aiuto sarebbe apprezzato. E come da commento qui sotto, se cambio il contenuto come 'new StringContent (JsonConvert.SerializeObject (root), Encoding.UTF8, "application / json")', ottengo una risposta alla richiesta non valida
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;
Risposte
Con HttpClientalcune intestazioni vengono conteggiate come intestazioni di richiesta e altre come intestazioni di contenuto. Non sono sicuro del motivo per cui abbiano fatto questa distinzione, ma la linea di fondo è che devi aggiungere le intestazioni nel posto corretto.
Nel caso di Content-Type, questo può essere aggiunto come parte del StringContentcostruttore o StringContentall'oggetto costruito .
Il mio approccio consiste nell'usare il costruttore:
Content = new StringContent(Newtonsoft.Json.JsonConvert.SerializeObject(root), System.Text.Encoding.UTF8, "application/json");
O in alternativa impostarlo in seguito:
Content = new StringContent(Newtonsoft.Json.JsonConvert.SerializeObject(root))
Content.Headers.ContentType = new MediaTypeHeaderValue("application/json");
Nota: se il problema persiste dopo aver apportato questa modifica, è probabile che si tratti di un problema lato server e dovrai contattare il manutentore dell'API per chiedere cosa stai facendo di sbagliato.
Preferisco usare alcuni wrapper di terze parti come FluentClient Nota che non dovresti istanziare un nuovo oggetto per ogni richiesta, O lo hai fatto solo per il gusto di un esempio.
var client = new FluentClient("https://test.com/api/v2/orders/")
.PostAsync(URI)
.WithBody(root)
.WithBearerAuthentication("ABcdwenlfbl8HY0aGO9Z2NacFj1234");
var response = await client.AsResponse();