Потоковый ответ HTTP в C#
Тело можно читать порциями из потока. Его даёт
вызов ReadAsStreamAsync - так удобно для
большого файла, когда не нужна одна строка на
весь ответ.
Прочитаем первые байты с example.com через
ReadAsync в буфер. Число прочитанных
байтов будет больше нуля:
using System.Net.Http;
using HttpClient client = new();
using HttpResponseMessage response = await client.GetAsync("https://example.com/");
await using Stream stream = await response.Content.ReadAsStreamAsync();
byte[] buf = new byte[64];
int n = await stream.ReadAsync(buf);
Console.WriteLine(n);
Поток закрывают через await using, иначе
соединение может держаться дольше нужного.
Вызов GetStringAsync проще для маленького
текста, а поток удобнее для длинного ответа.
Сразу после открытия поток доступен для чтения:
using System.Net.Http;
using HttpClient client = new();
using HttpResponseMessage response = await client.GetAsync("https://example.com/");
await using Stream stream = await response.Content.ReadAsStreamAsync();
Console.WriteLine(stream.CanRead);
Из ответа "https://httpbin.org/html"
прочитайте через поток 100 байт и
выведите, сколько байт получено.