C# Http响应返回的流不可作为响应查找。长度抛出“;“无支持”;
我试图从一个从外部源检索到的文件中读取字节,但是在运行代码时,出现以下错误:C# Http响应返回的流不可作为响应查找。长度抛出“;“无支持”;,c#,stream,binary,C#,Stream,Binary,我试图从一个从外部源检索到的文件中读取字节,但是在运行代码时,出现以下错误: System.NotSupportedException: Specified method is not supported.\r\n at System.Net.Http.HttpBaseStream.get_Length() 我的代码如下: var responseBody = (request.GetResponseAsync().Result).GetResponseStream();
System.NotSupportedException: Specified method is not supported.\r\n at System.Net.Http.HttpBaseStream.get_Length()
我的代码如下:
var responseBody = (request.GetResponseAsync().Result).GetResponseStream();
byte[] file;
var br = new BinaryReader(responseBody);
file = br.ReadBytes((int)br.BaseStream.Length);
using (MemoryStream ms = new MemoryStream())
{
int read;
while ((read = responseBody.Read(file, 0, file.Length)) > 0)
{
ms.Write(file, 0, read);
}
}
var result = new MemoryStream(file);
它在以下行失败:
file = br.ReadBytes((int)br.BaseStream.Length);
我似乎找不到解决这个问题的办法,有人能提出解决办法吗 您输入二进制读取器的流不可查找。您可以检查CanSeek属性以查看此内容 例如,当服务器使用分块编码返回响应时,无法事先知道文件大小 试试这个。您已经在从响应流读取,而不是从BinaryReader读取 注意:您还可以使用CopyTo()
使用
CopyTo
如图所示,我已经更新了标题以匹配您的例外情况-请查看并编辑您想要实现的内容(这样帖子可以作为@Wyck found的副本关闭),或者可以澄清为什么您希望reader.BaseStream
的行为与您开始的流的行为不同。
var responseBody = (request.GetResponseAsync().Result).GetResponseStream();
byte[] tempBuffer = new byte[8192];
MemoryStream ms = new MemoryStream();
int read;
while ((read = responseBody.Read(tempBuffer, 0, tempBuffer.Length)) > 0)
{
ms.Write(tempBuffer, 0, read);
}
var result = ms;