Бөлісу құралы:


Потоковая передача HTTP-ответов, включенных по умолчанию в http-клиентах браузера

Клиенты HTTP браузера теперь поддерживают потоковую передачу HTTP-ответов по умолчанию. Следовательно, метод HttpContent.ReadAsStreamAsync теперь возвращает BrowserHttpReadStream вместо MemoryStream, который не поддерживает синхронные операции. Это может потребовать обновления существующего кода, который зависит от синхронных операций потока.

Представленная версия

.NET 10

Предыдущее поведение

Ранее в средах браузера, таких как WebAssembly (WASM) и Blazor, клиент HTTP буферировал весь ответ по умолчанию. Объект HttpContent содержал MemoryStream, если вы явно не включили потоковую передачу ответов, используя этот параметр WebAssemblyEnableStreamingResponse.

var response = await httpClient.GetAsync("https://example.com");
var contentStream = await response.Content.ReadAsStreamAsync(); // Returns MemoryStream

Новое поведение

Начиная с .NET 10 потоковая передача HTTP-ответов включена по умолчанию. Больше HttpContent не содержит MemoryStream. Вместо этого HttpContent.ReadAsStreamAsync возвращает значение BrowserHttpReadStream, которое не поддерживает синхронные операции.

var response = await httpClient.GetAsync("https://example.com");
var contentStream = await response.Content.ReadAsStreamAsync(); // Returns BrowserHttpReadStream

Тип разрушающего изменения

Изменение поведения .

Причина изменения

Это изменение поддерживает сценарии использования для потокового вещания GetFromJsonAsAsyncEnumerable.

Если приложение использует синхронные операции потока, обновите код для использования асинхронных альтернатив. Чтобы отключить потоковую передачу глобально или для конкретных запросов, используйте указанные параметры конфигурации.

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

request.Options.Set(new HttpRequestOptionsKey<bool>("WebAssemblyEnableStreamingResponse"), false);
// or
request.SetBrowserResponseStreamingEnabled(false);

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

<WasmEnableStreamingResponse>false</WasmEnableStreamingResponse>

Примечание.

По состоянию на .NET 10 Preview 3 <WasmEnableStreamingResponse> свойство еще недоступно. Он будет доступен в будущем релизе. Дополнительные сведения см. в статье о проблеме с GitHub.

Затронутые API