我在使用FindByIdAsync加载用户对象时遇到问题(FindByIdEmailAsync,FindByNameAsync在这种特定情况下也不起作用)。 FindByIdAsync返回null。
IdentityController.cs
public class IdentityController : Controller
{
private readonly UserManager<ApplicationUser> userManager;
private readonly IIdentityService identity;
private readonly RoleManager<IdentityRole> roleManager;
public IdentityController(UserManager<ApplicationUser> userManager,
IIdentityService identity,
RoleManager<IdentityRole> roleManager)
{
this.userManager = userManager;
this.identity = identity;
this.roleManager = roleManager;
}
public async Task<IActionResult> Roles(string id)
{
var user = await this.userManager.FindByIdAsync(id);
var u = this.userManager.GetUserId(User);
if (user == null)
{
return NotFound();
}
....
用户在数据库中: user in database并将用户ID传递给控制器操作: Debuger
尝试过使用新标准VS2017 ASP.NET核心MVC模板的某种游乐场,并在About和它上面仅添加FindByIdAsync。
由于
答案 0 :(得分:1)
根据您的图片,您的id
字符串包含在{
和}
符号中,但这不是数据库中的字符串。我还注意到,从GetUserId
返回的值不包含在大括号中。从id
解析大括号,或使用u
的值,或将正确的值传递给Roles
。
例如:
public async Task<IActionResult> Roles(string id)
{
if (id.Length > 0 && id[0] == '{')
id = id.Substring(1, id.Length - 2);
var user = await this.userManager.FindByIdAsync(id);
var u = this.userManager.GetUserId(User);
if (user == null)
{
return NotFound();
}
....