#c# #json #face-api
#c# #json #face-api
Вопрос:
Я пытаюсь отправить фотографию из Imgur через URL-адрес в Microsoft Face API и получить идентификатор лица из ответа Json, но когда я пытаюсь запустить код, я всегда получаю ошибку синтаксического анализа 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).Resu<
var jsonResponse = response.Content.ReadAsStringAsync().Resu<
dynamic json = JsonConvert.DeserializeObject(jsonResponse);
Console.WriteLine(jsonResponse);
}
}
{«ошибка»: {«код»: «Неверный аргумент», «сообщение»: «Ошибка синтаксического анализа JSON».}}
Тело запроса C # выглядит следующим образом:
[{"url":"https://i.imgur.com/... .png"}]
В то время как тело запроса Postman выглядит следующим образом:
{ "url": "https://i.imgur.com/... .png" }
Комментарии:
1. В чем разница между вашим запросом C # и вашим запросом Postman? Вы можете использовать такой инструмент, как Telerik’s Fiddler, чтобы выяснить это. Единственное, что бросается мне в глаза (не зная face API), это: вы должны передавать массив или один объект?
2. Разница между запросом тела. Вот как это выглядит:
[{"url":"https://i.imgur.com/... .png"}]
Вот как это должно выглядеть:{ "url": "https://i.imgur.com/... .png" }
Ответ №1:
Основываясь на вашем комментарии, вы ожидаете получить один объект, но генерируете массив. Это сводится к следующей строке кода:
body = new System.Object[] { new { url = @"https://i.imgur.com/... .png" } };
Это создает массив с одним элементом в нем. На самом деле вам нужен всего один элемент:
body = new { url = @"https://i.imgur.com/... .png" };
Обратите внимание, что [ ]
в JSON — это массив, а { }
в JSON — объект.