次の方法で共有


ブラウザーの 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 Preview 3 の時点では、 <WasmEnableStreamingResponse> プロパティはまだ使用できません。 今後のリリースで利用可能になる予定です。 詳細については、 GitHub の問題を参照してください。

影響を受ける API