如何在 ASP NET CORE 3.0 中获取当前登录的用户 ID?
How to get current logged in user id in ASP NET CORE 3.0?
我是一名学生,我正在尝试学习如何在 ASP NET 中使用身份和关系,如果你能帮助我了解这些是如何工作的,可以去哪里看或看什么。
我正在尝试制作一个简单的待办事项列表,以便登录的用户只能看到自己的数据而不是其他人,我设法让它注册,但是当我想创建一个待办事项控制器时显示错误。
这个问题是当我尝试获取当前登录用户时向我显示一条消息:
*
错误
"Cannot implicitly convert type
'Microsoft.AspNetCore.Identity.IdentityUser' to
'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(选项=.....
确保 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 的回答正是我所需要的。
我是一名学生,我正在尝试学习如何在 ASP NET 中使用身份和关系,如果你能帮助我了解这些是如何工作的,可以去哪里看或看什么。
我正在尝试制作一个简单的待办事项列表,以便登录的用户只能看到自己的数据而不是其他人,我设法让它注册,但是当我想创建一个待办事项控制器时显示错误。
这个问题是当我尝试获取当前登录用户时向我显示一条消息: *
错误
"Cannot implicitly convert type 'Microsoft.AspNetCore.Identity.IdentityUser' to '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(选项=.....
确保 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 的回答正是我所需要的。