使用应用程序/八位字节流进行 POST 调用

Nul*_*nce 4 c# rest .net-core azure-cognitive-services

嗨,我正在尝试触发对以下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;
}
Run Code Online (Sandbox Code Playgroud)

我收到以下错误result

{"error":{"code":"BadArgument","message":"JSON parsing error."}}
Run Code Online (Sandbox Code Playgroud)

如果我使用application/json, 并传递 http 链接,则此代码工作正常。

Ant*_*e V 6

作为微软给出示例代码,您可以尝试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);
}
Run Code Online (Sandbox Code Playgroud)

  • 对于将其与 Azure 计算机视觉 API(OCR/读取)一起使用并发布二进制数据(图像)的人,该行应该是 `content.Headers.ContentType = new MediaTypeHeaderValue("application/octet-stream");` (2认同)