ブラウザー 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
.NET