ホームページ >バックエンド開発 >C++ >ASP.NET Core のリクエスト スコープのコントローラーで現在のユーザー情報に効率的にアクセスする方法

ASP.NET Core のリクエスト スコープのコントローラーで現在のユーザー情報に効率的にアクセスする方法

Mary-Kate Olsen
Mary-Kate Olsenオリジナル
2025-01-13 12:10:43581ブラウズ

How to Efficiently Access Current User Information in ASP.NET Core Request-Scoped Controllers?

ASP.NET Core リクエスト スコープのコントローラーでユーザーの詳細にアクセスする

電子メール アドレスなど、認証されたユーザーの詳細を取得することは、Web アプリケーションでは非常に重要です。 ただし、ASP.NET Core リクエスト スコープのコントローラーでこれを効率的に管理するには、慎重な検討が必要です。

問題: コントローラーのコンストラクター内で HttpContext.User に直接アクセスすると、null HttpContext が返され、ユーザー情報の取得が妨げられることがよくあります。各アクション メソッドでこのデータを繰り返し取得するのは非効率です。

解決策: [Authorize] 属性と IHttpContextAccessor サービスを活用します。

ユーザー情報にアクセスする手順:

  1. IHttpContextAccessor (.NET 6 以降では Startup.cs) に Program.cs を登録します。
<code class="language-csharp">public void ConfigureServices(IServiceCollection services)
{
    services.AddHttpContextAccessor();
    // ... other services
}</code>
  1. 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 サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。