Stream 在放置 HTTP Post 请求时不支持读取

Che*_*Trt 0 c# http-post filestream

我面临一个错误,即“流不支持阅读”。我正在向 url 发出 Http post 请求。下面是我正在使用的代码

var request = (HttpWebRequest) WebRequest.Create("https://test.com/Hotel Hospitality Source?method=fetchInfo");

var postData = "&username=testing";
postData += "&password=Testing";
postData += "&hotelId=h075-103";
var data = Encoding.ASCII.GetBytes(postData);

request.Method = "POST";
request.ContentType = "application/x-www-form-urlencoded";
request.ContentLength = data.Length;
using(var ms = new MemoryStream())
request.GetRequestStream().CopyTo(ms);

var response = (HttpWebResponse) request.GetResponse();

var responseString = new StreamReader(response.GetResponseStream()).ReadToEnd();
Run Code Online (Sandbox Code Playgroud)

首先我使用了下面的代码。

 using (var stream = request.GetRequestStream())
 {
     stream.Write(data, 0, data.Length);
 }

 var response = (HttpWebResponse)request.GetResponse();

 var responseString = new StreamReader(response.GetResponseStream()).ReadToEnd();
Run Code Online (Sandbox Code Playgroud)

在此处输入图片说明

当我使用 CopyTo 方法进行流时出现错误。我该如何解决这个错误?

Cod*_*ter 5

什么是using (var ms=new MemoryStream()) request.GetRequestStream().CopyTo(ms);应该做的?您正在尝试将请求流(它是只写的)复制到您然后处置的新内存流中。

您需要写入请求流:

using (var stream = request.GetRequestStream())
{
    stream.Write(data, 0, data.Length);
}
Run Code Online (Sandbox Code Playgroud)

  • 该错误由`request.GetRequestStream().Length` 引发,因为**这是一个只写流**。只是不要对请求流做任何事情,而是写入它。 (3认同)