首页 >后端开发 >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