检索经过身份验证的用户详细信息(例如电子邮件地址)在 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中文网其他相关文章!