Я создаю приложение для Android, которое подключается к API моего сайта с помощью С# и xamarin. После отладки некоторое время я понял, что когда я устанавливаю ContentLength, приложения зависают, а затем выдают исключение TIMEOUT.
Я пытался не устанавливать ContentLength, но тогда швы тела не отправлялись с запросом.
public void Post(object data, string route){
string JSON = JsonConvert.SerializeObject(data);
var web = (HttpWebRequest)WebRequest.Create("http://httpbin.org/post");
//web.ContentLenfth = JSON.length;
web.ContentType = "application/json";
web.Method = "POST";
try{
var sw = new StreamWriter(webRequest.GetRequestStream());
sw.Write(JSON);
var webResponse = (HttpWebResponse)webRequest.GetResponse();
var sr = new StreamReader(webResponse.GetResponseStream());
var result = sr.ReadToEnd();
...
}
...
}
Если ContentLengt установлен, приложение зависает до тех пор, пока не будет вызвана функция тайм-аута. иначе тестовый URL-адрес, который я отправляю, говорит мне, что я не отправлял тело
Что мне нужно сделать, чтобы отправить успешный запрос POST
?
Вы должны установить длину как длину массива байтов, который вы отправляете (а не длину строки)
Вы можете получить массив байтов из строки json, выполнив:
var bytes = Encoding.UTF8.GetBytes(JSON);
Затем вы можете установить длину содержимого:
web.ContentLength = bytes.length;
И отправьте байты:
using (var requestStream = web.GetRequestStream())
{
requestStream.Write(bytes, 0, bytes.Length);
}
Ааа Спасибо! Я буквально пробовал все, что мог найти в течение нескольких часов!