次の方法で共有


ASP.NET Core Blazor アプリでの IHttpContextAccessor/HttpContext

手記

これは、この記事の最新バージョンではありません。 現在のリリースについては、この記事の .NET 9 バージョンを参照してください。

大事な

この情報は、商用リリース前に大幅に変更される可能性があるプレリリース製品に関連しています。 Microsoft は、ここで提供される情報に関して明示的または黙示的な保証を行いません。

現在のリリースについては、この記事の .NET 9 バージョンを参照してください。

IHttpContextAccessor は、有効な HttpContext が常に使用できるわけではありませんので、対話型レンダリングでは一般に避ける必要があります。

IHttpContextAccessor は、サーバーに静的にレンダリングされるコンポーネントに使用できます。 ただし、可能であれば回避することをお勧めします。

HttpContext は、一般的なタスクとして、App コンポーネント(Components/App.razor)のヘッダーやその他のプロパティの検査や変更を行うために、静的にレンダリングされたルート コンポーネントでのみ カスケード パラメーター として使用できます。 この値は対話型レンダリングにおいて常に null です。

[CascadingParameter]
public HttpContext? HttpContext { get; set; }

対話型レンダリング中に、HttpContext インスタンスが存在しない場合もあります。 対話型コンポーネントで HttpContext が必要なシナリオでは、サーバーから永続的なコンポーネント状態を備えたコンテキストデータを提供することをお勧めします。

高度な エッジ ケース 追加のコンテキストについては†次の記事の説明を参照してください。

†この記事の一般的なガイダンスに従っている限り、Blazor アプリを構築および保守するほとんどの開発者は、高度な概念を掘り下げる必要はありません。

サーバー側の Blazor アプリの Razor コンポーネントで直接または間接的に IHttpContextAccessor/HttpContext を使用しないでください。 Blazor アプリは、ASP.NET Core パイプライン コンテキストの外部で実行されます。 HttpContext は、IHttpContextAccessor内で使用できる保証はありません。また、HttpContext は、Blazor アプリを起動したコンテキストを保持するとは限りません。

Blazor アプリに要求の状態を渡すための推奨される方法は、アプリの初期レンダリング中にルート コンポーネント パラメーターを使用することです。 または、アプリ全体で使用するために、ルート コンポーネントの初期化ライフサイクル イベントのスコープサービスにデータをコピーすることもできます。 詳細については、「コア サーバー側の ASP.NET と、その他のセキュリティ シナリオBlazor Web App を参照してください。

サーバー側の Blazor セキュリティの重要な側面は、特定の回線に接続されているユーザーが、Blazor 回線が確立された後のある時点で更新される可能性がありますが、IHttpContextAccessor更新されないということです。 カスタム サービスを使用してこのような状況に対処する方法の詳細については、「ASP.NET Core サーバー側と、追加のセキュリティ シナリオ Blazor Web App を参照してください。

ASP.NET Core SignalRでの IHttpContextAccessorHttpContext のガイダンスについては、ASP.NET Core SignalRの IHttpContextAccessor/HttpContext のを参照してください。