Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/267.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# MVC 5 ASP.NET标识-CreateAync无效用户id_C#_Asp.net_Asp.net Mvc_Asp.net Mvc 4_Asp.net Identity - Fatal编程技术网

C# MVC 5 ASP.NET标识-CreateAync无效用户id

C# MVC 5 ASP.NET标识-CreateAync无效用户id,c#,asp.net,asp.net-mvc,asp.net-mvc-4,asp.net-identity,C#,Asp.net,Asp.net Mvc,Asp.net Mvc 4,Asp.net Identity,我有两个网站使用一个数据库,我使用asp.net标识(2.2.1.40403),我有一个问题我不能理解。这已经是第三次了,我不知道问题出在哪里 我有这样一个注册和发送电子邮件的方法 [HttpPost] [AllowAnonymous] [ValidateAntiForgeryToken] public async Task<ActionResult> Register(RegisterViewModel model) { if (ModelState.IsValid)

我有两个网站使用一个数据库,我使用asp.net标识(2.2.1.40403),我有一个问题我不能理解。这已经是第三次了,我不知道问题出在哪里

我有这样一个注册和发送电子邮件的方法

[HttpPost]
[AllowAnonymous]
[ValidateAntiForgeryToken]
public async Task<ActionResult> Register(RegisterViewModel model)
{
    if (ModelState.IsValid)
    {
        var user = new User { UserName = model.Email, Email = model.Email, RegisterDate = DateTime.Now };
        var result = await UserManager.CreateAsync(user, model.Password);
        if (result.Succeeded)
        {
            //await SignInManager.SignInAsync(user, isPersistent: false, rememberBrowser: false);

            // For more information on how to enable account confirmation and password reset please visit http://go.microsoft.com/fwlink/?LinkID=320771
            await SendConfirmationEmail(user);

            return View("ConfirmationEmailSent");
        }
        AddErrors(result);
    }

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

private async Task SendConfirmationEmail(Dal.Models.User user)
{
    // Send an email with this link
    string code = await UserManager.GenerateEmailConfirmationTokenAsync(user.Id);

    var callbackUrl = Url.Action("ConfirmEmail", "Account", new { userId = user.Id, code = code }, protocol: Request.Url.Scheme);
    await UserManager.SendEmailAsync(user.Id, "Potvrzení Vašeho účtu", "Prosím potvrďte svou emailovou adresu kliknutím <a href=\"" + callbackUrl + "\">zde</a>.");
}
[HttpPost]
[异名]
[ValidateAntiForgeryToken]
公共异步任务“);
}

发生的事情是,当用户注册时,当用户Id设置为
3d847c51-7217-49fe-ae9d-d8e46e291559
时,他收到了URL,但在数据库中,用户是用
95789d6e-b66e-4c9e-8ee4-fe384b82e838
创建的。我不明白这是怎么发生的。顺便说一下,数据库中没有Id为
3d847c51-7217-49fe-ae9d-d的用户8e46e291559
。您知道这是为什么以及如何发生的吗?

我建议在创建成功后通过标识符调用用户,以确保属性匹配

//...other code removed for brevity

var user = new User { UserName = model.Email, Email = model.Email, RegisterDate = DateTime.Now };
var result = await UserManager.CreateAsync(user, model.Password);
if (result.Succeeded)
{
    //pick one
    //user = await UserManager.FindById(user.Id);
    //user = await UserManager.FindByName(user.UserName);
    user = await UserManager.FindByEmailAsync(user.Email);

    // For more information on how to enable account confirmation and password reset please visit http://go.microsoft.com/fwlink/?LinkID=320771
    await SendConfirmationEmail(user);

    return View("ConfirmationEmailSent");
}
AddErrors(result);

//…为简洁起见删除了其他代码

我还怀疑该问题与
UserManager.CreateAsync()
方法有关。您使用的是正确的。我宁愿使用手动生成的用户id,而不是由
UserManager
生成的

在您的情况下,将:

    var user = new User { UserName = model.Email, Email = model.Email, RegisterDate = DateTime.Now };
    user.Id = Guid.NewGuid().ToString();
    var result = await UserManager.CreateAsync(user, model.Password);
    if (result.Succeeded)
    {             
         await SendConfirmationEmail(user);

         return View("ConfirmationEmailSent");
    } 

如果你用同一个用户的用户名而不是使用新创建的
用户
,会发生什么?我刚刚实现了这一点,这是唯一发生的,所以我无法模拟它。不知道,等待日志。嗨,谢谢你的回答。我知道我可以这样做,但我想了解我是如何做到的这是可能的。@Teamol,在该框架生命周期的这个阶段,我只能假设它是该版本中的一个bug。它可能与异步实现相关联。必须查看该版本的源代码。发现了一个关于以错误顺序创建异步调用的问题