ASP.NET Core Identity 2 usermanager CreateAsync似乎永远不会完成

时间:2018-01-29 14:58:44

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

我正在为我的ASP.NET Core 2项目使用Identity。虽然我对此感到很满意,因为我发现了更多关于它的信息,但我遇到了一个问题,而我似乎无法弄清楚这里出了什么问题。代码如下:

public class UserNewViewModel
{
    public UserNewViewModel()
    {

    }
    public UserNewViewModel(Domain.User user)
    {
        NormalizedEmail = user.NormalizedEmail;
        UserName = user.UserName;
        Password = string.Empty;
        Email = user.Email;
        FirstName = user.FirstName;
        LastName = user.LastName;
    }
    public string NormalizedEmail { get; set; }
    public string UserName { get; set; }
    /*[Required]
    [MinLength(8)]*/
    public string Password { get; set; }
    [Required]
    [EmailAddress]
    public string Email { get; set; }
    [Required]
    public string FirstName { get; set; }
    [Required]
    public string LastName { get; set; }
    public string Disabled { get; set; }
}

发送到:

[HttpPost]
    //[AllowAnonymous]
    [ValidateAntiForgeryToken]
    public async Task<IActionResult> RegisterUser(ViewModels.UserNewViewModel model)
    {
        if (ModelState.IsValid)
        {
            if(string.IsNullOrEmpty(model.UserName))
            {
                model.UserName = model.Email;
            }
            var existingUser = _BygBookDataContext.Users.FirstOrDefault(u => u.NormalizedEmail.Equals(model.NormalizedEmail));
            if(existingUser == null)
            {
                existingUser = new Domain.User(){
                        UserName = model.UserName,
                        Email = model.Email                     
                    };

                var result = await _userManager.CreateAsync(existingUser, model.Password);
if(result.Success)
{

}

            }
            else
            {
                existingUser.UserName = model.UserName;
                existingUser.FirstName = model.FirstName;
                existingUser.LastName = model.LastName;
                existingUser.Email = model.Email;

                await _userManager.UpdateAsync(existingUser);

                _BygBookDataContext.SaveChanges();

                if(!string.IsNullOrEmpty(model.Password))
                {
                    var pwToken = await _userManager.GeneratePasswordResetTokenAsync(existingUser);

                    await _userManager.ResetPasswordAsync(existingUser, pwToken, model.Password);

                    _BygBookDataContext.SaveChanges();
                }
            }


            return PartialView("UserNewPartial", existingUser);
        }

        // If we got this far, something failed, redisplay form
        return PartialView(model);
    }

就我而言,罪魁祸首是这一行:

await _userManager.CreateAsync(existingUser, model.Password);

我无法弄清楚这出错的地方。我尝试在我的代码的其他地方做类似的事情:

await userMan.CreateAsync(new Domain.User{
                            UserName = "teknik@bygbook.dk",
                            Email = "teknik@bygbook.dk",
                            FirstName ="Teknik",
                            LastName = string.Empty,
                            EmailConfirmed = true
                        },
                        adminPassword);

因此,考虑问题是否可以通过从数据库加载来初始化现有用户,但这似乎不太可能,因为EF很难跟踪空值。

有谁能告诉我这里有什么问题?

编辑:即使将它放入一个变量并在if(result.success)设置一个断点,它也永远不会在那里中断,它似乎一直在等待createAsync

1 个答案:

答案 0 :(得分:0)

好吧,就像白痴一样,我没有检查model.Password是否真的有价值。它没有。我仍然想知道为什么userManager.CreateAsync(user, null)没有抛出异常或给出任何错误或任何错误,但是你去了。

缺陷是我的输入,基本上是<input type="password" name="Email" />所以当我将属性值设置为'密码'时,它就像一个魅力。抱歉占用你的时间。