檢索經過驗證的使用者詳細資訊(例如電子郵件地址)在 Web 應用程式中至關重要。 然而,在 ASP.NET Core 請求範圍的控制器中有效管理這一點需要仔細考慮。
問題:在控制器的建構函式中直接存取 HttpContext.User
通常會導致 HttpContext
為空,從而阻止使用者資訊擷取。在每個操作方法中重複獲取這些數據效率很低。
解:利用 [Authorize]
屬性和 IHttpContextAccessor
服務。
存取使用者資訊的步驟:
IHttpContextAccessor
中註冊 Startup.cs
(或在 .NET 6 及更高版本中註冊 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>
這種方法可讓您在控制器的建構子中存取使用者的身分。然後,您可以儲存此資訊以供以後在控制器中使用,從而提高效率並避免重複呼叫HttpContext.User
。 使用空條件運算子 (?.
) 可以處理聲明可能不存在的情況。
以上是如何在 ASP.NET Core 請求範圍控制器中有效存取目前使用者資訊?的詳細內容。更多資訊請關注PHP中文網其他相關文章!