FindByIdAsync返回null用户对象,dotnet core 2.0

时间:2017-11-24 18:16:30

标签: c# asp.net-core asp.net-identity

我在使用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。

由于

1 个答案:

答案 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();
    }      
 ....