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

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

受影响的 API