電子メール アドレスなど、認証されたユーザーの詳細を取得することは、Web アプリケーションでは非常に重要です。 ただし、ASP.NET Core リクエスト スコープのコントローラーでこれを効率的に管理するには、慎重な検討が必要です。
問題: コントローラーのコンストラクター内で HttpContext.User
に直接アクセスすると、null HttpContext
が返され、ユーザー情報の取得が妨げられることがよくあります。各アクション メソッドでこのデータを繰り返し取得するのは非効率です。
解決策: [Authorize]
属性と IHttpContextAccessor
サービスを活用します。
ユーザー情報にアクセスする手順:
IHttpContextAccessor
(.NET 6 以降では Startup.cs
) に Program.cs
を登録します。<code class="language-csharp">public void ConfigureServices(IServiceCollection services) { services.AddHttpContextAccessor(); // ... other services }</code>
IHttpContextAccessor
をコントローラーのコンストラクターに挿入します:<code class="language-csharp">public class MyController : Controller { private readonly IHttpContextAccessor _httpContextAccessor; public MyController(IHttpContextAccessor httpContextAccessor) { _httpContextAccessor = httpContextAccessor; //Retrieve and store user ID var userId = _httpContextAccessor.HttpContext.User.FindFirst(ClaimTypes.NameIdentifier)?.Value; //Further processing of userId as needed... } // ... your controller actions ... }</code>
このアプローチにより、コントローラーのコンストラクター内でユーザーの ID にアクセスできるようになります。この情報を後で使用するためにコントローラー内に保存できるため、効率が向上し、HttpContext.User
の繰り返し呼び出しを回避できます。 null 条件演算子 (?.
) を使用すると、クレームが存在しない可能性があるケースに対処できます。
以上がASP.NET Core のリクエスト スコープのコントローラーで現在のユーザー情報に効率的にアクセスする方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。