使用应用程序/octet-stream进行POST调用

8

你好,我试图触发对以下API的POST调用。这是代码:

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;
}

我在result中遇到了以下错误:
{"error":{"code":"BadArgument","message":"JSON parsing error."}}

如果我使用application/json并传递一个http链接,这段代码可以正常工作。

2个回答

9
作为微软提供的示例代码,您可以尝试像样例一样设置ContentType
using (var content = new ByteArrayContent(byteData))
{
     content.Headers.ContentType = new MediaTypeHeaderValue("< your content type, i.e. application/json >");
     response = await client.PostAsync(uri, content);
}

2
对于使用Azure计算机视觉API(OCR / Read)并发布二进制数据(图像)的人,应该将该行设置为content.Headers.ContentType = new MediaTypeHeaderValue("application/octet-stream"); - Vitox

3

尝试将请求内容类型设置为"application/octet-stream"。


难道不是这样设置的吗?client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/octet-stream"));? - Null Reference
1
"Accept":是指浏览器可接受的内容,例如某人能够理解的所有语言。"Content-Type":是实际数据所采用的格式,例如某人正在使用的语言。由于计算机不能(好吧,现在他们能够)像人类那样识别其他类型,比如说“哦,他是德国人!”或者“她在说中文!”。 - Rui Fernandes

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接