EDIT Только в случае, если им ошибочный диагноз, вот пример того, что посылается: T6NLmFUZdYYdvhxmq67WD / TiShKbE0rK0xdHXJGo5sVx9 / CrmBTViiQxjqLEQN66HkAUB9LvXW6C55maPLMd7u2cwNc8OlNuPTvZfx63Aawso / 2mvewXQauUytGZ1Q8D
1004 * А что получил: T6NLmFUZdYYdvhxmq67WD% 2fTiShKbE0rK0xdHXJGo5sVx9% 2fCrmBTViiQxjqLEQN66HkAUB9LvXW6C55maPLMd7u2cwNc8OlNuPTvZfx63Aawso% 2f2mvewXQauUytGZ1Q8D
'% 2' вместо backsla sh является лучшим примером того, о чем я говорю
EDIT2 Для тех, кто придет после: обработчик загрузки raw сделал трюк и исправил это. Однако если вы хотите получить доступ к ответу сервера, вам нужно создать обработчик загрузки. Для текста используйте DownloadHandlerBuffer, например,
www.downloadHandler = new DownloadHandlerBuffer();
Затем, после отправки запроса, используйте его для получения строкового ответа:
string response = System.Text.Encoding.UTF8.GetString(www.downloadHandler.data);
Я отправляю вызов REST с помощью UnityWebRequest Unity, для функций Azure функции типа HttpTrigger.
Теперь обе эти функции не предоставляют байты, они делают это в бэкэнде и передают мне строки. Однако, когда моя функция получает мои данные, они содержат много экранированных символов, и я считаю, что они не закодированы должным образом. Я не уверен, КАК правильно его кодировать, учитывая, что я не могу просто преобразовать свою строку в байт [] с UTF8.GetBytes, и наоборот.
Извиняюсь, если дублировал, я искал и не мог найти достаточно похожую проблему.
См. Unity и azure код здесь: https://pastebin.com/pE4dYSfF
//UNITY SIDE
IEnumerator Foo()
{
var N = JSON.Parse("{}");
N["input1"] = input1.text;
N["input2"] = input2.text;
string encrypted = Encrypt(N.ToString(), GenerateEncryptionKey);
print("ENSEND: \n" + encrypted);
using (UnityWebRequest www = UnityWebRequest.Post(targetURL, encrypted))
{
yield return www.SendWebRequest();
if (www.isHttpError || www.isNetworkError)
{
Debug.LogError(www.error + "\n" + www.downloadHandler.text);
onFail?.Invoke();
}
else
{
onSuccess?.Invoke();
print(www.responseCode + " : " + www.downloadHandler.text);
}
}
yield break;
}
//FUNCTION SIDE
[FunctionName("UserAuthentication")]
public static async Task<IActionResult> Run(
[HttpTrigger(AuthorizationLevel.Anonymous, "get", "post", Route = null)] HttpRequest req,
ILogger log)
{
log.LogInformation("C# HTTP trigger function processed a request.");
string name = req.Query["name"];
string requestBody = await new StreamReader(req.Body).ReadToEndAsync();
try
{
requestBody = Decrypt(requestBody, "Dracon");
} catch (Exception e)
{
//Throwing exception here due to escaped characters
return new BadRequestObjectResult(e.Message + "\n" + requestBody + "\n" + Regex.Unescape(requestBody));
}
JSONNode N = null;
try
{
N = JSON.Parse(requestBody);
if (N["input1"] != "")
{
name = N["username"];
return (ActionResult)new OkObjectResult($"Hello, {name}");
} else if (name != "")
{
return (ActionResult)new OkObjectResult($"Hello, {name}");
} else
{
return new BadRequestObjectResult("Invalid object syntax");
}
} catch (Exception e)
{
return new BadRequestObjectResult("Invalid JSON provided. N = " + (N != null).ToString() + "\n" + requestBody + "\n" + e.Message);
}
}