You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

ASP.NET Core中用户名未占用却提示已存在的异常问题

背景

本问题是我上一个问题的延续。在上一个问题中,我遇到了无法登录已有用户的问题,感谢Md Farid Uddin Kiron的帮助,我修改了appsettings.json中的连接字符串,解决了该问题,但现在又出现了新的问题。

问题描述

我遇到了一个异常问题:尝试创建新账户时,系统提示用户名已存在,但实际上我只有一个用户名(邮箱地址)唯一的用户,无法理解该问题的成因。

我附上了处理注册流程的函数,但我认为问题并非出自此处。

public async Task<IActionResult> OnPostAsync(string returnUrl = null)
{
    returnUrl ??= Url.Content("~/");

    ExternalLogins = (await _signInManager.GetExternalAuthenticationSchemesAsync()).ToList();

    if (ModelState.IsValid)
    {
        var user = new ApplicationUser
                {
                    UserName = Input.Email,
                    Email = Input.Email,
                    FirstName = Input.FirstName,
                    LastName = Input.LastName
                };

        var result = await _userManager.CreateAsync(user, Input.Password);

        if (result.Succeeded)
        {
            _logger.LogInformation("User created a new account with password.");

            var code = await _userManager.GenerateEmailConfirmationTokenAsync(user);
            code = WebEncoders.Base64UrlEncode(Encoding.UTF8.GetBytes(code));
            var callbackUrl = Url.Page("/Account/ConfirmEmail",
                    pageHandler: null,
                    values: new { area = "Identity", userId = user.Id, code = code, returnUrl = returnUrl },
                    protocol: Request.Scheme);

            await _emailSender.SendEmailAsync(Input.Email, "Confirm your email",
                                              $"Please confirm your account by <a href='{HtmlEncoder.Default.Encode(callbackUrl)}'>clicking here</a>.");

            if (_userManager.Options.SignIn.RequireConfirmedAccount)
            {
                return RedirectToPage("RegisterConfirmation", new { email = Input.Email, returnUrl = returnUrl });
            }
            else
            {
                await _signInManager.SignInAsync(user, isPersistent: false);
                return LocalRedirect(returnUrl);
            }
        }

        foreach (var error in result.Errors)
        {
            ModelState.AddModelError(string.Empty, error.Description);
        }
    }

    // If we got this far, something failed, redisplay form
    return Page();
}
CreateAsync方法说明
//
// 摘要:
//     以异步操作的方式在后台存储中创建指定用户并设置给定密码。
//
// 参数:
//   user:
//     要创建的用户。
//
//   password:
//     要哈希并存储的用户密码。
//
// 返回:
//     表示异步操作的System.Threading.Tasks.Task,包含操作的Microsoft.AspNetCore.Identity.IdentityResult结果。
public virtual Task<IdentityResult> CreateAsync(TUser user);

[AsyncStateMachine(typeof(UserManager<>.<CreateAsync>d__78))]
public virtual Task<IdentityResult> CreateAsync(TUser user, string password);

如需更多代码,请随时告知。

感谢您的时间。


内容的提问来源于stack exchange,提问作者David

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.28 09:43:18