繁体   English   中英

如何在 ASP NET CORE 3.0 中获取当前登录的用户 ID?

[英]How to get current logged in user id in ASP NET CORE 3.0?

我是一名学生,我正在尝试学习如何在 ASP NET 中使用身份和关系,如果您可以帮助我了解这些工作的方式。

我正在尝试制作一个简单的待办事项列表,以便登录的用户只能查看自己的数据而不是其他人,我设法使其注册,但是当我想创建一个待办事项时,控制器显示错误。

这个问题是,当我尝试获取当前登录的用户时,会显示一条消息:*

错误

“无法将类型 'Microsoft.AspNetCore.Identity.IdentityUser' 隐式转换为 'ToDoList.Models.MyUser'。)”

模型

namespace ToDoList.Models
{
    public class MyUser : IdentityUser
    {
        public string HomeTown { get; set; }
        public virtual ICollection<ToDo> ToDoes { get; set; }
    }

    public class ToDo
    {
        public int Id { get; set; }
        public string Description { get; set; }
        public bool IsDone { get; set; }
        public virtual MyUser User { get; set; }
    }
}

控制器

 [HttpPost]
        [ValidateAntiForgeryToken]
        public async Task<IActionResult> Create([Bind("Id,Description,IsDone")] ToDo toDo)
        {
            var user = await _userManager.GetUserAsync(HttpContext.User);

            if (ModelState.IsValid)
            {
                toDo.User = user; < -- Here it points the error
                _context.Todoes.Add(toDo);
                await _context.SaveChangesAsync();
                return RedirectToAction("Index");
            }
            return View(toDo);
        }

在您的启动文件中,您需要使用自定义用户模型配置身份。

services.AddDefaultIdentity(options =.....

确保 DI UserManager 如下所示:

private readonly UserManager<MyUser> _userManager;
public HomeController(UserManager<MyUser>)
{
    _userManager = userManager;
}

要解决此问题,您应该创建一个MyUser并为这个新创建的对象设置属性,如下所示:

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

        if (ModelState.IsValid)
        {
            var newUserInfo = new ToDoList.Models.MyUser{
                 //set related properties from user to this object
                 //for example
                 UserName = user.UserName
                 //and add other properties
            };   

            toDo.User = newUserInfo ;  
            _context.Todoes.Add(toDo);
            await _context.SaveChangesAsync();
            return RedirectToAction("Index");
        }

感谢所有试图提供帮助的人,但就我而言,Majid Qafouri 的回答正是我所需要的。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM