Udostępnij przez


Przesyłanie strumieniowe odpowiedzi HTTP domyślnie włączone w klientach HTTP przeglądarki

Klienci HTTP przeglądarki domyślnie włączają przesyłanie strumieniowe odpowiedzi HTTP. HttpContent.ReadAsStreamAsync W związku z tym metoda zwraca teraz wartość BrowserHttpReadStream zamiast MemoryStream, która nie obsługuje operacji synchronicznych. Może to wymagać aktualizacji istniejącego kodu, który opiera się na operacjach synchronicznego strumienia.

Wersja wprowadzona

.NET 10

Poprzednie zachowanie

Wcześniej w środowiskach przeglądarki, takich jak WebAssembly (WASM) i Blazor, klient HTTP buforował całą odpowiedź domyślnie. Obiekt HttpContent zawierał MemoryStream, o ile nie wybrałeś wyraźnie opcji przesyłania strumieniowego odpowiedzi z użyciem WebAssemblyEnableStreamingResponse.

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

Nowe zachowanie

Począwszy od platformy .NET 10, przesyłanie strumieniowe odpowiedzi HTTP jest domyślnie włączone. Obiekt HttpContent nie zawiera już parametru MemoryStream. HttpContent.ReadAsStreamAsync Zamiast tego zwraca wartość BrowserHttpReadStream, która nie obsługuje operacji synchronicznych.

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

Typ zmiany przełamującej

Jest to zmiana zachowania.

Przyczyna zmiany

Ta zmiana obsługuje scenariusze dotyczące przesyłania strumieniowego GetFromJsonAsAsyncEnumerable.

Jeśli aplikacja korzysta z synchronicznych operacji strumienia, zaktualizuj kod, aby używał asynchronicznych alternatyw. Aby wyłączyć przesyłanie strumieniowe globalnie lub dla określonych żądań, użyj podanych opcji konfiguracji.

Aby wyłączyć przesyłanie strumieniowe dla poszczególnych żądań, użyj następujących elementów:

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

Aby wyłączyć przesyłanie strumieniowe globalnie, ustaw zmienną środowiskową DOTNET_WASM_ENABLE_STREAMING_RESPONSE lub dodaj następujące elementy do pliku projektu:

<WasmEnableStreamingResponse>false</WasmEnableStreamingResponse>

Uwaga / Notatka

Od wersji .NET 10 Preview 3 właściwość <WasmEnableStreamingResponse> nie jest jeszcze dostępna. Będzie ona dostępna w przyszłej wersji. Aby uzyskać więcej informacji, zobacz zgłoszenie GitHub.

Interfejsy API, których dotyczy problem