我在将数据从 MemoryStream 复制到请求流时遇到问题。
var Request = (HttpWebRequest.Create(Url) as HttpWebRequest);
Request.Method = "PUT";
Stream RequestStream = Request.GetRequestStream();
// write to MemoryStream
var MemStream = new MemoryStream();
byte[] Test = Encoding.ASCII.GetBytes("test000rn");
MemStream.Write(Test, 0, Test.Length);
// test writing correctly
byte[] B = MemStream.ToArray();
System.Windows.Forms.MessageBox.Show(Encoding.ASCII.GetString(B)); // shows data correctly
// copy data to request stream(not working!)
MemStream.CopyTo(RequestStream);
// add new data to request stream(working)
byte[] Test1 = Encoding.ASCII.GetBytes("test111");
RequestStream.Write(Test1, 0, Test1.Length);
仅发送到服务器"test111"。有什么想法吗?
复制以从当前位置复制数据。 因此,由于位置在末尾,因此无法复制。 其中 as ToArray
返回所有数据,而不考虑位置。
复制从当前流中的当前位置开始,并且在复制操作完成后不会重置目标流的位置。
试试这个
MemStream.Position = 0;
MemStream.CopyTo(RequestStream);
请参阅 Stream.CopyTo 了解更多信息
内存流的位置在末尾。 因为MemStream.Write(Test, 0, Test.Length);
用:
// copy data to request stream(would work!)
MemStream.Position = 0;
MemStream.CopyTo(RequestStream);
设置 MemoryStream 对象 Position=0 并使用 CopyTo 方法
MemStream.Position = 0;MemStream.CopyTo(RequestStream);