[英]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.