Поток, возвращаемый Http-ответом, не доступен для поиска в качестве ответа. Длительность выдает «unsupported» - PullRequest
0 голосов
/ 22 апреля 2020

Я пытаюсь прочитать байты из файла, который я извлек из внешнего источника, однако при запуске кода я получаю следующую ошибку:

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

Кажется, я не могу найти решение проблемы, может кто-нибудь предложить решение?

1 Ответ

1 голос
/ 22 апреля 2020

Поток, который вы передаете в двоичный ридер, не доступен для поиска. Вы можете проверить свойство CanSeek, чтобы увидеть это.

Например, когда сервер использует chunked-кодировку для возврата ответа, заранее узнать размер файла невозможно.

Попробуйте это. Вы уже читаете из потока ответов, а не из 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;
...