c# - Http 响应返回的流不可作为响应查找。长度抛出 "unsupported"

标签 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();

        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()

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;

关于c# - Http 响应返回的流不可作为响应查找。长度抛出 "unsupported",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61355388/

相关文章:

c# - 为什么我的 .net 应用程序在机器重新启动后启动速度非常慢?

c# - 是否可以使用依赖于c++项目的Azure Pipeline网络核心项目进行管理?

java - 在java中将 float 转换为具有相同位表示形式的整数?

c - 如何将整数与分数相乘

java - 二进制转字符矩阵帮助

c# - 在类库中嵌入二进制文件

c# - StreamWriter 似乎没有做任何事情?

java - 关闭 ByteArrayOutputStream 的最佳方法是什么?

delphi - Delphi7中如何从流中剪切一部分

flutter - 如何在 Flutter 中嵌套 StreamBuilder?