Sdílet prostřednictvím


Streamování odpovědí HTTP povolených ve výchozím nastavení v klientech HTTP prohlížeče

Klienti HTTP prohlížeče teď ve výchozím nastavení povolují streamované odpovědi HTTP. V důsledku toho HttpContent.ReadAsStreamAsync metoda nyní vrací BrowserHttpReadStream místo MemoryStream, která nepodporuje synchronní operace. To může vyžadovat aktualizace existujícího kódu, který závisí na synchronních operacích streamu.

Verze byla představena

.NET 10

Předchozí chování

Dříve v prohlížečovém prostředí, jako je WebAssembly (WASM) a Blazor, klient HTTP ve výchozím nastavení zpracovával celou odpověď do vyrovnávací paměti. Objekt HttpContent obsahoval MemoryStream , pokud jste explicitně nepovolili streamování odpovědí pomocí této WebAssemblyEnableStreamingResponse možnosti.

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

Nové chování

Od verze .NET 10 jsou streamované odpovědi HTTP ve výchozím nastavení povolené. Už HttpContent neobsahuje MemoryStream. HttpContent.ReadAsStreamAsync Místo toho vrátí hodnotu BrowserHttpReadStream, která nepodporuje synchronní operace.

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

Typ zásadní změny

Jedná se o změnu chování.

Důvod změny

Tato změna podporuje případy použití streamování GetFromJsonAsAsyncEnumerable.

Pokud vaše aplikace spoléhá na synchronní operace streamu, aktualizujte kód tak, aby používal asynchronní alternativy. Pokud chcete streamování zakázat globálně nebo pro konkrétní požadavky, použijte poskytnuté možnosti konfigurace.

Pokud chcete zakázat streamování pro jednotlivé požadavky, použijte následující:

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

Pokud chcete streamování zakázat globálně, nastavte proměnnou DOTNET_WASM_ENABLE_STREAMING_RESPONSE prostředí nebo do souboru projektu přidejte následující:

<WasmEnableStreamingResponse>false</WasmEnableStreamingResponse>

Poznámka:

Od .NET 10 Preview 3 není vlastnost <WasmEnableStreamingResponse> ještě k dispozici. Bude k dispozici v budoucí verzi. Další podrobnosti najdete v problému s GitHubem.

Ovlivněná rozhraní API