Я работаю над новым приложением Unity, которое использует Api Azure Face:
И у меня есть проблема с почтовым запросом UniteWebRequest .У меня есть две функции, первое использование HttpClient , и оно работает!
public async void giveTempFaceID(string Url)
{
HttpClient client = new HttpClient();
string azurKey = GameManager.instance.AzurKey;
string faceListName = GameManager.instance.faceListName;
string UriBase = GameManager.instance.UriBaseDetect;
string requestParameters =
"returnFaceId=true&returnFaceLandmarks=true&returnFaceAttributes=age,gender,headPose," +
"smile,facialHair,glasses,hair,makeup,occlusion,accessories,blur,exposure," +
"noise&recognitionModel=recognition_02&returnRecognitionModel=false";
string jsonParameters = "{\"url\": \"" + Url + "\"}";
string uri = UriBase + "?" + requestParameters;
client.DefaultRequestHeaders.Add(
"Ocp-Apim-Subscription-Key", azurKey);
HttpResponseMessage response;
byte[] byteData = Encoding.UTF8.GetBytes(jsonParameters);
using (var content = new ByteArrayContent(byteData))
{
content.Headers.ContentType = new MediaTypeHeaderValue("application/json");
response = await client.PostAsync(uri, content);
}
string tmpContent = await response.Content.ReadAsStringAsync();
Debug.Log(uri);
Debug.Log(tmpContent);
Debug.Log(jsonParameters);
JSONNode data = JSON.Parse(tmpContent);
string faceId = data[0]["faceId"].Value;
Debug.Log(faceId);
}
void Start()
{
giveTempFaceID("http://psycho2rue.fr/wp-content/uploads/2015/01/visage9-e1345982192269.jpg"));
}
Но я хочу использовать UnityWebRequest, но так и не работает:
IEnumerator giveTempFaceId(string url)
{
string azurKey = GameManager.instance.AzurKey;
string faceListName = GameManager.instance.faceListName;
string UriBase = GameManager.instance.UriBaseDetect;
string requestParameters =
"returnFaceId=true&returnFaceLandmarks=true&returnFaceAttributes=age,gender,headPose," +
"smile,facialHair,glasses,hair,makeup,occlusion,accessories,blur,exposure," +
"noise&recognitionModel=recognition_02&returnRecognitionModel=false";
string jsonParameters = "{\"url\": \"" + url + "\"}";
Debug.Log(jsonParameters);
string uri = UriBase + "?" + requestParameters;
using (UnityWebRequest request = UnityWebRequest.Post(uri, jsonParameters))
{
request.method = UnityWebRequest.kHttpVerbPOST;
request.SetRequestHeader("Ocp-Apim-Subscription-Key", azurKey);
request.SetRequestHeader("Content-Type", "application/json");
yield return request.SendWebRequest();
if (request.isNetworkError)
Debug.Log("Network = : " + request.downloadHandler.text);
if (request.isHttpError)
Debug.Log("Http = : " + request.downloadHandler.text);
}
}
void Start()
{
StartCoroutine(giveTempFaceId("http://psycho2rue.fr/wp-content/uploads/2015/01/visage9-e1345982192269.jpg"));
}
С UnityWebRequest , у меня следующая ошибка:
{"error": {"code": "BadArgument", "message": "Ошибка синтаксического анализа JSON."}}
И я не понимаю почему, потому что я использую один и тот же Json для двух образцов.Я думаю, что проблемы, вероятно, происходят от request.SetRequestHeader("Content-Type", "application/json");
Но я не понимаю, что не так с моим кодом ...
Редактировать: Проблема в том, что UnityWebRequest кодирует данные (спасибо derHugo!)
Данные будут кодироваться URLE перед передачей
Теперь мои вопросы: «Можно ли просто сказать методу Post не кодировать?»Или мне нужно создать пользовательский запрос, например this ?