Compartir a través de


Streaming de respuestas HTTP habilitadas de forma predeterminada en los clientes HTTP del explorador

Los clientes HTTP del explorador ahora habilitan las respuestas HTTP de streaming de forma predeterminada. Por lo tanto, el HttpContent.ReadAsStreamAsync método ahora devuelve un BrowserHttpReadStream en lugar de , MemoryStreamque no admite operaciones sincrónicas. Esto puede requerir actualizaciones en el código existente que se basa en operaciones de flujo sincrónicas.

Versión introducida

.NET 10 Preview 3

Comportamiento anterior

En entornos de explorador como WebAssembly (WASM) y Blazor, el cliente HTTP almacenaba en búfer toda la respuesta de forma predeterminada. El objeto HttpContent contenía un MemoryStream a menos que optara explícitamente por transmitir respuestas con la opción WebAssemblyEnableStreamingResponse.

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

Nuevo comportamiento

Las respuestas HTTP de streaming ahora están habilitadas de forma predeterminada. El HttpContent objeto ya no contiene un MemoryStream. En su lugar, HttpContent.ReadAsStreamAsync devuelve un BrowserHttpReadStream, que no admite operaciones sincrónicas.

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

Tipo de cambio disruptivo

Se trata de un cambio de comportamiento .

Motivo del cambio

Este cambio admite casos de uso relacionados con el streaming GetFromJsonAsAsyncEnumerable.

Si la aplicación se basa en operaciones de flujo sincrónicas, actualice el código para usar alternativas asincrónicas. Para deshabilitar el streaming global o para solicitudes específicas, use las opciones de configuración proporcionadas.

Para deshabilitar el streaming para solicitudes individuales, use lo siguiente:

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

Para deshabilitar el streaming globalmente, establezca la variable DOTNET_WASM_ENABLE_STREAMING_RESPONSE de entorno o agregue lo siguiente al archivo del proyecto:

<WasmEnableStreamingResponse>false</WasmEnableStreamingResponse>

Nota:

A partir de .NET 10 Preview 3, la <WasmEnableStreamingResponse> propiedad aún no está disponible. Estará disponible en una versión futura. Para obtener más información, consulte el problema de GitHub.

Las APIs afectadas