如何在C#中使用HttpWebRequest或httpClient正确进行POST

时间:2019-05-18 14:40:51

标签: c# post httpwebrequest dotnet-httpclient

我正在尝试在C#中发布一些json数据。 到目前为止,我已经尝试了两种方法。一个使用HttpWebRequest(工作原理,下面提供更多信息),另一个使用httpClient(我宁愿使用此功能)。

Method: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();

两个都给出错误:无法从传输连接中读取数据:连接已关闭。

将此行添加到第二种方法即可解决此问题。

    myHttpWebRequest.ProtocolVersion = HttpVersion.Version10;

我不明白为什么会这样。有没有一种方法可以使用httpClient执行此操作,因为我更愿意使用它。 任何帮助表示赞赏。谢谢。

0 个答案:

没有答案