ClaimsPrincipal.Current からの移行
ASP.NET 4.x プロジェクトでは、ClaimsPrincipal.Current を使用して、現在認証されているユーザーの ID と要求を取得することが一般的でした。 ASP.NET Core では、このプロパティは設定されません。 それに依存していたコードは更新し、現在認証されているユーザーの ID を別の手段で取得する必要があります。
静的状態ではなくコンテキスト固有状態
ASP.NET Core の使用時、ClaimsPrincipal.Current
と Thread.CurrentPrincipal
の両方の値が設定されません。 これらのプロパティはどちらも静的な状態を表し、ASP.NET Core では通常、避けられます。 代わりに、ASP.NET Core では依存関係の挿入 (DI) を使用し、現在のユーザーの ID など、依存関係を提供します。 テスト ID を簡単に挿入することができるので、DI から現在のユーザーの ID を取得することはテストとして適しています。
ASP.NET Core アプリで現在のユーザーを取得する
ClaimsPrincipal.Current
の代わりに ASP.NET Core で現在のユーザーの ClaimsPrincipal
を取得する方法がいくつかあります。
ControllerBase.User。 MVC コントローラーでは、User プロパティを使用し、現在認証されているユーザーにアクセスできます。
HttpContext.User。 現在の
HttpContext
(ミドルウェアなど) にアクセスできるコンポーネントでは、HttpContext.User から現在のユーザーのClaimsPrincipal
を取得できます。呼び出し元から渡される。 現在の
HttpContext
へのアクセスがないライブラリは多くの場合、コントローラーまたはミドルウェア コンポーネントから呼び出され、現在のユーザーの ID を引数として受け取ることができません。IHttpContextAccessor。 ASP.NET Core に移行されているプロジェクトは大きすぎて現在のユーザーの ID を必要なすべての場所に簡単に渡せないことがあります。 そのような場合、IHttpContextAccessor を回避策として使用できます。
IHttpContextAccessor
は (存在する場合) 現在のHttpContext
にアクセスできます。 DI を使用している場合は、「ASP.NET Core の HttpContext へのアクセス」を参照してください。 ASP.NET Core の DI 駆動アーキテクチャを使用するようにまだ更新されていないコードで現在のユーザーの ID を取得する短期的解決策は次のようになります。Startup.ConfigureServices
で AddHttpContextAccessor を呼び出し、DI コンテナーでIHttpContextAccessor
を利用できるようにします。- 起動時に
IHttpContextAccessor
のインスタンスを取得し、それを静的変数に格納します。 このインスタンスは、以前に静的プロパティから現在のユーザーを取得したコードで利用できます。 HttpContextAccessor.HttpContext?.User
を利用して現在のユーザーのClaimsPrincipal
を取得する このコードが HTTP 要求のコンテキストを外れて使用されている場合、HttpContext
は null です。
最後の方法は静的変数に格納されている IHttpContextAccessor
インスタンスを使用することですが、それは、挿入された依存関係の方が静的依存関係より望ましいとする ASP.NET Core の原則に相反します。 代わりに、最終的に DI から IHttpContextAccessor
インスタンスを取得する予定です。 ただし、ClaimsPrincipal.Current
を使用する大型の既存 ASP.NET アプリを移行する場合、静的ヘルパーがブリッジとして役立つことがあります。
ASP.NET Core
フィードバック
https://aka.ms/ContentUserFeedback」を参照してください。
以下は間もなく提供いたします。2024 年を通じて、コンテンツのフィードバック メカニズムとして GitHub の issue を段階的に廃止し、新しいフィードバック システムに置き換えます。 詳細については、「フィードバックの送信と表示