Как правильно POST, используя HttpWebRequest или httpClient в C # - PullRequest
1 голос
/ 18 мая 2019

Я пытаюсь опубликовать некоторые данные JSON в C #. До сих пор я попробовал два метода. Один с HttpWebRequest (который работает, больше информации ниже), а другой с httpClient (я бы лучше использовал этот).

Метод: httpClient

using (HttpClient client = new HttpClient())
{                
    var content = new StringContent(postData, Encoding.UTF8, "application/json");
    var response = await client.PostAsync(url, content);
    responseString = await response.Content.ReadAsStringAsync();
}

Метод: HttpWebRequest


    HttpWebRequest myHttpWebRequest = (HttpWebRequest)WebRequest.Create(url);
    myHttpWebRequest.Method = "POST";
    byte[] data = Encoding.ASCII.GetBytes(postData);
    myHttpWebRequest.ContentType = "application/json";
    myHttpWebRequest.ContentLength = data.Length;

    Stream requestStream = await myHttpWebRequest.GetRequestStreamAsync();

    requestStream.Write(data, 0, data.Length);
    requestStream.Close();
    HttpWebResponse myHttpWebResponse = (HttpWebResponse)await myHttpWebRequest.GetResponseAsync();
    Stream responseStream = myHttpWebResponse.GetResponseStream();
    StreamReader myStreamReader = new StreamReader(responseStream, Encoding.Default);
    string pageContent = myStreamReader.ReadToEnd();
    myStreamReader.Close();
    responseStream.Close();
    myHttpWebResponse.Close();

Оба выдают ошибку: Невозможно прочитать данные из транспортного соединения: Соединение было закрыто.

Добавление этой строки во 2-й метод решает проблему.

    myHttpWebRequest.ProtocolVersion = HttpVersion.Version10;

Я не понимаю, почему это так. Есть ли способ, которым я могу сделать это с httpClient, потому что я бы предпочел использовать это. Любая помощь приветствуется. Спасибо.

...