我需要基于UserId从.Net Core 3.0中的IdentityUser类获取帖子作者的UserName。用户ID是我的帖子表中的一列。
到目前为止,我已经尝试添加此内容
@使用Microsoft.AspNetCore.Identity @inject UserManager UserManager
@ {var用户名=等待UserManager.FindByIdAsync(Model.Posts.Userid).Result.UserName}
不幸的是,这给出了运行时错误“对象引用未设置为对象的实例。”
我无法将数据库中的脚手架添加到上下文类,因为当我这样做时,由于添加到上下文中的任何表都被视为默认IdentityUser类的重复,因此该应用程序将无法运行。
我尝试过Google搜索“ .net core按ID获取用户名”之类的内容,但是我发现的所有示例仅获取登录用户的用户名或ID。我想获取用户名,该用户名与posts表中的作者ID匹配。
一个更好的解决方案是从我制作的PostsService类中获取UserName,但我不知道如何获取不在ApplicationDbContext中的内容的外键值
答案 0 :(得分:0)
等待时不要使用.Result
@{var username = (await UserManager.FindByIdAsync(Model.Posts.Userid))?.UserName;}
像这样的逻辑最好放在控制器中。
答案 1 :(得分:0)
在控制器中,您可以注入UserManager<IdentityUser>
以获取用户名:
private readonly ILogger<IndexModel> _logger;
private readonly UserManager<IdentityUser> _userManager;
public IndexModel(ILogger<IndexModel> logger, UserManager<IdentityUser> userManager)
{
_logger = logger;
_userManager = userManager;
}
public async Task OnGetAsync()
{
var user = await _userManager.FindByIdAsync("975c96e2-85a4-46ac-8211-53c8ebae0e87");
if (user != null)
{
var name = user.UserName;
}
}
为什么要使用OnGetAsync
方法而不是OnPostAsync
方法发布数据?
答案 2 :(得分:0)
我有完全相同的问题。我结束了在BlogPost模型中创建另一个字段来保存发帖人的用户名,并在创建帖子时使用下面的第一种解决方案来检索发帖人的用户名。然后,将发帖人的姓名与该帖子一起存储在数据库中,很容易将其与其他帖子信息一起检索。