Compartilhar via


Respostas HTTP com transmissão contínua habilitadas 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 dá suporte a operações síncronas. Isso pode exigir atualizações no código existente que dependem de operações de fluxo síncronas.

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 HttpContent objeto 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, as respostas HTTP de streaming são habilitadas por padrão. O HttpContent não contém mais um MemoryStream. Em vez disso, HttpContent.ReadAsStreamAsync retorna um BrowserHttpReadStream. que não dá 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

Essa é uma mudança comportamental.

Motivo da alteração

Essa alteração dá suporte a casos de uso relacionados ao streaming GetFromJsonAsAsyncEnumerable.

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

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

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

Para desabilitar 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 Versão Prévia 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