我使用FindByIdAsync(FindbyIdeMailasync,FindbyNameSync也在这种特定情况下也不起作用)。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();
}
....
用户在数据库中:数据库中的用户和用户ID被传递给控制器操作:调试器
已经尝试使用新的标准VS2017 ASP.NET Core MVC模板进行了某种操场
谢谢
根据您的图像,您的id
字符串包裹在{
和}
符号中,但这不是数据库中的字符串。我还注意到,您从GetUserId
获得的价值没有包裹在牙套中。从id
解析牙套,或使用u
的值,或将正确的值传递给Roles
。
ex:
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();
}
....