Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

POST call with application/octet-stream

Hi I'm trying to trigger a POST call to the following API. and here's code

var client = new HttpClient();

client.DefaultRequestHeaders.Accept.Clear();
client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/octet-stream"));
client.DefaultRequestHeaders.Add("Ocp-Apim-Subscription-Key", key);

var queryString = HttpUtility.ParseQueryString(string.Empty);
queryString["returnFaceId"] = "true";
queryString["returnFaceLandmarks"] = "false";
queryString["returnFaceAttributes"] = "age,gender";

var filebytes = File.ReadAllBytes(@"C:\Users\user1\Desktop\IMG.jpg");

var uri = "https://southeastasia.api.cognitive.microsoft.com/face/v1.0/detect?" + queryString;

HttpResponseMessage response;


using (var content = new ByteArrayContent(filebytes))
{
    response = client.PostAsync(uri, content).Result;
    var result = response.Content.ReadAsStringAsync().Result;
}

I get the following error in result:

{"error":{"code":"BadArgument","message":"JSON parsing error."}}

This code works fine if I use application/json, and pass a http link.

like image 971
Null Reference Avatar asked Jan 02 '23 00:01

Null Reference


2 Answers

As the example code given by Microsoft, can you try to set ContentType like the sample :

using (var content = new ByteArrayContent(byteData))
{
     content.Headers.ContentType = new MediaTypeHeaderValue("< your content type, i.e. application/json >");
     response = await client.PostAsync(uri, content);
}
like image 157
Antoine V Avatar answered Jan 09 '23 02:01

Antoine V


Try to set request content type as "application/octet-stream".

like image 28
Rui Fernandes Avatar answered Jan 09 '23 02:01

Rui Fernandes