首頁 >後端開發 >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 通常會導致 HttpContext 為空,從而阻止使用者資訊擷取。在每個操作方法中重複獲取這些數據效率很低。

解:利用 [Authorize] 屬性和 IHttpContextAccessor 服務。

存取使用者資訊的步驟:

  1. IHttpContextAccessor 中註冊 Startup.cs(或在 .NET 6 及更高版本中註冊 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>

這種方法可讓您在控制器的建構子中存取使用者的身分。然後,您可以儲存此資訊以供以後在控制器中使用,從而提高效率並避免重複呼叫HttpContext.User。 使用空條件運算子 (?.) 可以處理聲明可能不存在的情況。

以上是如何在 ASP.NET Core 請求範圍控制器中有效存取目前使用者資訊?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn