浏览器 HTTP 客户端中默认启用流式 HTTP 响应

浏览器 HTTP 客户端中现在默认启用流式 HTTP 响应。 因此,HttpContent.ReadAsStreamAsync 方法现在返回 BrowserHttpReadStream 而不是 MemoryStream,这不支持同步操作。 这可能需要更新依赖于同步流操作的现有代码。

引入的版本

.NET 10 预览版 3

以前的行为

在 WebAssembly (WASM) 和 Blazor 等浏览器环境中,HTTP 客户端默认缓冲整个响应。 HttpContent 对象包含一个 MemoryStream,除非使用 WebAssemblyEnableStreamingResponse 选项明确选择了流式响应。

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

新行为

现在默认启用流式 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 预览版 3,<WasmEnableStreamingResponse> 属性尚不可用。 它将在未来版本中可用。 有关更多详细信息,请参阅 GitHub 问题

受影响的 API