ASP.NET Core Blazor アプリでの IHttpContextAccessor
/HttpContext
IHttpContextAccessor は、有効な HttpContext が常に使用できるわけではありませんので、対話型レンダリングでは一般に避ける必要があります。
IHttpContextAccessor は、サーバーに静的にレンダリングされるコンポーネントに使用できます。 ただし、可能であれば回避することをお勧めします。
HttpContext は、一般的なタスクとして、App
コンポーネント(Components/App.razor
)のヘッダーやその他のプロパティの検査や変更を行うために、静的にレンダリングされたルート コンポーネントでのみ カスケード パラメーター として使用できます。 この値は対話型レンダリングにおいて常に null
です。
[CascadingParameter]
public HttpContext? HttpContext { get; set; }
対話型レンダリング中に、HttpContext インスタンスが存在しない場合もあります。 対話型コンポーネントで HttpContext が必要なシナリオでは、サーバーから永続的なコンポーネント状態を備えたコンテキストデータを提供することをお勧めします。
高度な エッジ ケース 追加のコンテキストについては†次の記事の説明を参照してください。
-
HttpContext は、Interactive Server Rendering Blazor ページ (
dotnet/AspNetCore.Docs
#34301) で有効です -
Blazor Server (
dotnet/aspnetcore
#45699) で IHttpContextAccessor を使用した場合のセキュリティへの影響
†この記事の一般的なガイダンスに従っている限り、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での IHttpContextAccessor と HttpContext のガイダンスについては、ASP.NET Core SignalRの IHttpContextAccessor/HttpContext のを参照してください。
ASP.NET Core