瀏覽器 HTTP 用戶端現在預設會啟用串流 HTTP 回應。 因此,HttpContent.ReadAsStreamAsync 方法現在會傳回 BrowserHttpReadStream,而非MemoryStream,後者不支援同步作業。 這可能需要更新依賴同步串流作業的現有程序代碼。
推出的版本
.NET 10
先前的行為
先前,在 WebAssembly (WASM) 和 Blazor 等瀏覽器環境中,HTTP 用戶端預設會緩衝整個回應。 除非您明確選擇使用 HttpContent 選項來串流回應,否則 MemoryStream 物件會包含 WebAssemblyEnableStreamingResponse 。
var response = await httpClient.GetAsync("https://example.com");
var contentStream = await response.Content.ReadAsStreamAsync(); // Returns MemoryStream
新行為
從 .NET 10 開始,預設會啟用串流 HTTP 回應。
HttpContent不再包含 MemoryStream。 相反地,HttpContent.ReadAsStreamAsync 傳回一個不支援同步操作的BrowserHttpReadStream。
var response = await httpClient.GetAsync("https://example.com");
var contentStream = await response.Content.ReadAsStreamAsync(); // Returns BrowserHttpReadStream
破壞性變更的類型
變更的原因
這項變更支援串流 GetFromJsonAsAsyncEnumerable的使用案例。
建議的動作
如果您的應用程式依賴同步串流作業,請更新程式代碼以使用異步替代方法。 若要全域或針對特定要求停用串流,請使用提供的組態選項。
若要停用個別請求的串流處理,請使用下列方法:
request.Options.Set(new HttpRequestOptionsKey<bool>("WebAssemblyEnableStreamingResponse"), false);
// or
request.SetBrowserResponseStreamingEnabled(false);
若要全域停用串流,請設定環境變數 DOTNET_WASM_ENABLE_STREAMING_RESPONSE ,或將下列內容新增至您的項目檔:
<WasmEnableStreamingResponse>false</WasmEnableStreamingResponse>
備註
自 .NET 10 Preview 3 起, <WasmEnableStreamingResponse> 屬性尚無法使用。 其將在未來的版本中提供。 如需詳細資訊,請參閱 GitHub 問題。