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;