我正在尝试从从外部源检索的文件中读取字节,但是在运行代码时出现以下错误:
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/