C# Asp Net核心标识在登录页上获取用户id

C# Asp Net核心标识在登录页上获取用户id,c#,asp.net-core,C#,Asp.net Core,在我的登录页面上的in Areas/Identity/Account/login 我有这个处理程序,我想记录哪个用户通过获取他的Id访问数据库。问题是即使签名结果成功,声明仍然是空的。我错过什么了吗?我知道我可以使用用户名在数据库中找到用户Id,但这只是一个额外的数据库调用,如果可能的话,我希望避免 public async Task<IActionResult> OnPostAsync(string returnUrl = null) {

在我的登录页面上的in Areas/Identity/Account/login

我有这个处理程序,我想记录哪个用户通过获取他的Id访问数据库。问题是即使签名结果成功,声明仍然是空的。我错过什么了吗?我知道我可以使用用户名在数据库中找到用户Id,但这只是一个额外的数据库调用,如果可能的话,我希望避免

        public async Task<IActionResult> OnPostAsync(string returnUrl = null)
        {
            returnUrl ??= Url.Content("~/Account/Index");

            if (!ModelState.IsValid)
            {
                _toast.AddErrorToastMessage("Dados inválidos.");
                return Page();
            }
            // This doesn't count login failures towards account lockout
            // To enable password failures to trigger account lockout, set lockoutOnFailure: true
            var result = await _signInManager.PasswordSignInAsync(Input.UserName, Input.Password, Input.RememberMe, lockoutOnFailure: false);
            var user = await _signInManager.UserManager.GetUserAsync(User);
            if (result.Succeeded)
            {
                _context.Accesses.Add(new Access
                {
                    Description = "Login",
                    Machine = Environment.MachineName,
                    UserId = User.GetUserId(),
                    IpAddress = Request.HttpContext.Connection.RemoteIpAddress.ToString()                    
                });

                try
                {
                    await _context.SaveChangesAsync();
                }
                catch(DbUpdateException ex)
                {
                    _logger.LogInformation(ex.InnerException.ToString());
                }

                _logger.LogInformation("User logged in.");
                return LocalRedirect(returnUrl);
            }

            _toast.AddErrorToastMessage("Username / Password Incorrecto(s).");
            return Page();
            // If we got this far, something failed, redisplay form           
        }
PostAsync上的公共异步任务(字符串returnUrl=null) { returnUrl???=Url.Content(“~/Account/Index”); 如果(!ModelState.IsValid) { _toast.AddErrorToast消息(“Dados inválidos.”); 返回页(); } //这不会将登录失败计入帐户锁定 //要启用密码故障触发帐户锁定,请设置lockoutOnFailure:true var result=wait _signInManager.PasswordSignInAsync(Input.UserName、Input.Password、Input.RememberMe、lockoutOnFailure:false); var user=await\u signInManager.UserManager.GetUserAsync(用户); if(result.successed) { _context.Access.Add(新访问 { Description=“Login”, Machine=Environment.MachineName, UserId=User.GetUserId(), IpAddress=Request.HttpContext.Connection.RemoteIpAddress.ToString() }); 尝试 { wait_context.SaveChangesAsync(); } 捕获(DbUpdateException ex) { _logger.LogInformation(例如InnerException.ToString()); } _logger.LogInformation(“用户登录”); 返回LocalRedirect(returnUrl); } _toast.AddErrorToast消息(“用户名/密码不正确”); 返回页(); //如果我们走到这一步,有些东西失败了,重新显示形式 } 而不是

 _signInManager.UserManager.GetUserAsync(User);
试用

_signInManager.UserManager.FindByNameAsync(Input.UserName)