Partilhar via


Streaming de respostas HTTP habilitado por padrão em clientes HTTP do navegador

Os clientes HTTP do navegador agora habilitam o streaming de respostas HTTP por padrão. Consequentemente, o HttpContent.ReadAsStreamAsync método agora retorna um BrowserHttpReadStream em vez de um MemoryStream, que não oferece suporte a operações síncronas. Isso pode exigir atualizações para o código existente que depende de operações de fluxo síncrono.

Versão introduzida

.NET 10

Comportamento anterior

Anteriormente, em ambientes de navegador como WebAssembly (WASM) e Blazor, o cliente HTTP armazenava em buffer toda a resposta por padrão. O objeto HttpContent continha um MemoryStream a menos que você tenha optado explicitamente por transmitir respostas usando a opção WebAssemblyEnableStreamingResponse.

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

Novo comportamento

A partir do .NET 10, o streaming de respostas HTTP é habilitado por padrão. O HttpContent já não contém um MemoryStream. Em vez disso, HttpContent.ReadAsStreamAsync retorna um BrowserHttpReadStream, que não oferece suporte a operações síncronas.

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

Tipo de mudança disruptiva

Esta é uma mudança comportamental.

Motivo da mudança

Esta alteração suporta casos de uso relacionados com streaming GetFromJsonAsAsyncEnumerable.

Se seu aplicativo depende de operações de fluxo síncrono, atualize o código para usar alternativas assíncronas. Para desativar o streaming globalmente ou para solicitações específicas, use as opções de configuração fornecidas.

Para desativar o streaming para solicitações individuais, use o seguinte:

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

Para desativar o streaming globalmente, defina a variável DOTNET_WASM_ENABLE_STREAMING_RESPONSE de ambiente ou adicione o seguinte ao arquivo de projeto:

<WasmEnableStreamingResponse>false</WasmEnableStreamingResponse>

Observação

A partir do .NET 10 Preview 3, a <WasmEnableStreamingResponse> propriedade ainda não está disponível. Ele estará disponível em uma versão futura. Para obter mais detalhes, consulte o problema do GitHub.

APIs afetadas