Установка ContentLength на HttpWebRequest дает мне ошибку тайм-аута - PullRequest
0 голосов
/ 20 июня 2019

Я создаю приложение для Android, которое подключается к API моего сайта, используя C # и 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 запрос?

1 Ответ

1 голос
/ 20 июня 2019

Вы должны установить длину равной длине байтового массива, который вы отправляете (не длину строки)

Вы можете получить байтовый массив из строки json, выполнив:

var bytes = Encoding.UTF8.GetBytes(JSON);

Затем вы можете установить длину контента:

web.ContentLength = bytes.length;

И отправьте байты:

using (var requestStream = web.GetRequestStream())
{
    requestStream.Write(bytes, 0, bytes.Length);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...