Strömmande HTTP-svar aktiverade som standard i webbläsares HTTP-klienter

HTTP-klienter i webbläsaren aktiverar nu strömmande HTTP-svar som standard. Metoden HttpContent.ReadAsStreamAsync returnerar nu därför en BrowserHttpReadStream i stället för en MemoryStream, som inte stöder synkrona åtgärder. Detta kan kräva uppdateringar av befintlig kod som förlitar sig på synkrona strömåtgärder.

Version lanserad

.NET 10

Tidigare beteende

Tidigare buffrade HTTP-klienten hela svaret som standard i webbläsarmiljöer som WebAssembly (WASM) och Blazor. Objektet HttpContent innehöll en MemoryStream såvida du inte uttryckligen valde att strömma svar med hjälp av WebAssemblyEnableStreamingResponse alternativet .

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

Nytt beteende

Från och med .NET 10 aktiveras strömmande HTTP-svar som standard. Innehåller HttpContent inte längre en MemoryStream. HttpContent.ReadAsStreamAsync Returnerar i stället en BrowserHttpReadStream, som inte stöder synkrona åtgärder.

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

Typ av brytande ändring

Det här är en beteendeförändring.

Orsak till ändring

Den här ändringen stöder användningsfall kring strömning GetFromJsonAsAsyncEnumerable.

Om programmet förlitar sig på synkrona strömåtgärder uppdaterar du koden så att den använder asynkrona alternativ. Om du vill inaktivera direktuppspelning globalt eller för specifika begäranden använder du de angivna konfigurationsalternativen.

Om du vill inaktivera direktuppspelning för enskilda begäranden använder du följande:

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

Om du vill inaktivera direktuppspelning globalt anger du miljövariabeln DOTNET_WASM_ENABLE_STREAMING_RESPONSE eller lägger till följande i projektfilen:

<WasmEnableStreamingResponse>false</WasmEnableStreamingResponse>

Anmärkning

Från och med .NET 10 Preview 3 <WasmEnableStreamingResponse> är egenskapen ännu inte tillgänglig. Den kommer att vara tillgänglig i en framtida version. Mer information finns i GitHub-problemet.

Berörda API:er