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

ASP.NET Core 6.0中如何获取数据库用户名实现重复校验?

注册用户名重复检查解决方案(ASP.NET 6 Razor Pages)

核心优化点

不用把所有用户数据拉到内存里对比,直接通过EF Core的Any()方法在数据库层面做查询,更高效也更简洁。

修改步骤

  1. 替换用户名检查逻辑
    把你代码中注释的检查部分:
if (TempUser.Username == //database UserName value here )
{
    //Here would be where the Username is compared
    //UniUsername = false;
}

替换成:

// 检查数据库中是否已存在相同用户名,如需不区分大小写可添加StringComparison.OrdinalIgnoreCase
if (_context.User.Any(u => u.UserName == TempUser.Username))
{
    UniUsername = false;
}
  1. 移除不必要的全量查询
    删掉代码里的UserList = _context.User.ToList();,现在不需要把所有用户加载到内存中,节省资源。

修改后的完整OnPost方法代码

public IActionResult OnPost()
{
    User User = new User();
    HasPassword = true;
    HasUsername = true;
    UniUsername = true;
    SubjectChosen = true;

    if (!AQAMaths && !AQAPhys)
    {
        SubjectChosen = false;
    }
    if (string.IsNullOrWhiteSpace(TempUser.Password) || TempUser.Password.Length < 4)
    {
        HasPassword = false;
    }
    if (string.IsNullOrWhiteSpace(TempUser.Username) || TempUser.Username.Length < 4)
    {
        HasUsername = false;
    }
    // 新增的用户名重复检查逻辑
    if (_context.User.Any(u => u.UserName == TempUser.Username))
    {
        UniUsername = false;
    }
    if (!HasPassword || !HasUsername || !UniUsername || !SubjectChosen)
    {
        return RedirectToPage("/UserLogin/RegisterPage", new { HasPassword, HasUsername, UniUsername, SubjectChosen });
    }
    else
    {
        RegisterApproved = true;
        User.UserName = TempUser.Username;
        User.UserPass = TempUser.Password;
        User.UserCorrectAnsw = 0;
        User.UserTotalAnsw = 0;
        _context.User.Add(User);
        _context.SaveChanges();
        return RedirectToPage("/UserLogin/LoginPage", new { RegisterApproved });
    }
}

额外保障(可选)

为了彻底避免重复用户名,建议在数据库的User表UserName字段上添加唯一约束,即使代码层面有疏漏,数据库也会阻止重复数据插入。可以通过EF Core的Fluent API配置:
在ApplicationDbContext的OnModelCreating方法中添加:

protected override void OnModelCreating(ModelBuilder modelBuilder)
{
    modelBuilder.Entity<User>()
        .HasIndex(u => u.UserName)
        .IsUnique();
}

执行数据库迁移更新即可生效。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.23 02:06:35