【问题标题】:ASP.NET Core - Cannot convert from System.security.claims.claimsPrincipal to Scheduler.Areas.Identity.DataASP.NET Core - 无法从 System.security.claims.claimsPrincipal 转换为 Scheduler.Areas.Identity.Data
【发布时间】:2021-02-10 00:34:34
【问题描述】:

我正在尝试获取当前用户 ID,因此我的事件索引页面将仅显示来自当前用户的事件。

我的 HttpContext.User 在我的事件控制器的索引中出现错误“无法从 System.security.claims.claimsPrincipal 转换为 Scheduler.Areas.Identity.Data”。

var userId = await _userManager.GetUserIdAsync(HttpContext.User);

这是我的 EventsController 中的代码:

public EventsController(SchedulerDbContext context, UserManager<SchedulerUser> userManager)
        {
            _context = context;
            _userManager = userManager;
        }

        // GET: Events
        [Authorize]
        public async Task<IActionResult> Index()
        {
            var userId = await _userManager.GetUserIdAsync(HttpContext.User);
            return View(await _context.Events.Where(g => g.SchedulerUser == userId).ToListAsync());
        }

我应该在哪里解决这个问题?如果需要,我会更新更多代码。

【问题讨论】:

    标签: asp.net-core model-view-controller controller identity


    【解决方案1】:

    GetUserIdAsync 只接受 IdentityUser 类型。它不接受 ClaimsPrincipal 的类型,但 GetUserAsync 接受。

    var user = await _userManager.GetUserAsync(HttpContext.User);
    var userId = user.Id;
    

    或者,您也可以从 Claimsidentity 获取 Id 声明。

    var userId = claimsIdentity.FindFirst("id")?.Value;
    

    【讨论】:

    • 太棒了,谢谢!现在就像一个魅力。
    猜你喜欢
    • 2013-07-13
    • 1970-01-01
    • 1970-01-01
    • 2019-01-26
    • 2022-12-14
    • 2021-10-30
    • 2019-09-26
    • 2022-01-10
    • 2023-02-02
    相关资源
    最近更新 更多