尝试使用Face API时出现JSON解析错误

时间:2019-04-13 13:20:38

标签: c# json face-api

我正在尝试通过URL地址将来自Imgur的照片发送到Microsoft Face API,并从Json响应获取人脸ID,但是当我尝试运行代码时,总是会收到JSON解析错误。我不知道我在做什么错。

我试图通过Postman发出此请求,并且在那里一切正常,但是在c#中它根本无法工作。

你能帮我吗?

    static void TryFunction()
    {
        string host = "https://westcentralus.api.cognitive.microsoft.com/face/v1.0/detect?returnFaceId=true";
        string subscriptionKey = "...";

        body = new System.Object[] { new { url = @"https://i.imgur.com/... .png" } };
        var requestBody = JsonConvert.SerializeObject(body);

        using (var client = new HttpClient())
        using (var request = new HttpRequestMessage())
        {
            client.DefaultRequestHeaders.Add("Ocp-Apim-Subscription-Key", subscriptionKey);
            request.Method = HttpMethod.Post;
            request.RequestUri = new Uri(host);
            request.Content = new StringContent(requestBody, Encoding.UTF8, "application/json");

            var response = client.SendAsync(request).Result;
            var jsonResponse = response.Content.ReadAsStringAsync().Result;

            dynamic json = JsonConvert.DeserializeObject(jsonResponse);
            Console.WriteLine(jsonResponse);
        }
    }
  

{“错误”:{“代码”:“ BadArgument”,“消息”:“ JSON解析错误。”}}

C#请求正文如下:

[{"url":"https://i.imgur.com/... .png"}]

邮递员请求正文如下:

{ "url": "https://i.imgur.com/... .png" }

1 个答案:

答案 0 :(得分:0)

根据您的评论,您期望一个对象,但生成一个数组。这取决于下面的代码行:

body = new System.Object[] { new { url = @"https://i.imgur.com/... .png" } };

这将创建一个包含单个项目的数组。您真正想要的只是一个项目:

body = new { url = @"https://i.imgur.com/... .png" };

请注意,JSON中的[ ]是一个数组,JSON中的{ }是一个对象。