【发布时间】:2022-01-06 00:17:00
【问题描述】:
我正在尝试做一些看似非常简单的事情。我要做的就是为我的 Blazor 视图获取当前身份用户的电子邮件地址。我的服务器项目中有一个UserEmailController,带有一个返回Task<string> 的GetCurrent() 方法。
public class UserEmailsController : Controller
{
private readonly UserManager<ApplicationUser> _userManager;
public UserEmailsController(UserManager<ApplicationUser> userManager)
{
_userManager = userManager;
}
[HttpGet]
[Route("api/currentUser")]
public async Task<string> GetCurrent()
{
var user = await _userManager.GetUserAsync(User);
return await _userManager.GetEmailAsync(user);
}
}
根据我所做的探索,似乎Controller 基类上的User 属性应该在用户登录时将信息加载到其中,我应该能够执行类似@ 的操作987654327@。但是,当我打破这一行时,User 的Name 属性是null,以及许多其他值。但是IsAuthenticated 是真的。嗯?
所以,_userManager.GetUserAsync(User) 调用的结果是null。
我看过一些关于这个的帖子,有两个共同的主题。
#1 - 人们尝试在控制器的构造函数中使用User 属性,但它不起作用。建议的解决方案是在 Action 中使用它,这当然是我正在做的。
#2 - 另一个常见的建议是使用HttpContext.User,或注入IHttpContextAccessor(通过services.AddSingleton... 或services.AddHttpContextAccessor() 添加)。我已经尝试了所有这些方法,并且得到了相同的结果。
【问题讨论】:
标签: asp.net-core asp.net-identity blazor .net-6.0