【问题标题】:Unique properties from model with ASP.NET Identity具有 ASP.NET 标识的模型的独特属性
【发布时间】:2026-01-03 23:55:02
【问题描述】:

我正在使用 Visual Studio 2013 开发一个 WEB API asp.net 项目,并且我正在实施我的自定义身份模型以进行自定义注册。例如,我在 RegisterBindingModel 中添加了一个电子邮件字段。

这就是我所做的:How to extend asp.net web api 2 user?

我添加了 email 属性,我需要该属性是唯一的(作为 UserName),但默认情况下可以重复该 email 属性。我的问题是如何使此电子邮件属性独一无二,例如 UserName?我读过可以使用 UserValidator 设置唯一属性,但找不到如何设置。你能告诉我如何做到这一点,使用 UserValidator 还是最好的方法?

如何将 UserName 属性定义为唯一的?我到处都找不到。

谢谢。

【问题讨论】:

  • 我不明白 - 你想使用用户的电子邮件地址作为他们的用户名,还是你想要一个针对用户的附加属性来保存他们的电子邮件地址?为什么不把用户名设为电子邮件地址?
  • 因为我需要用户名的用户名属性和电子邮件的电子邮件属性,相反我需要知道如何制作独特的属性;这是主要问题。因为谁知道我将来需要哪些其他字段才能设置为唯一字段。谢谢你的建议
  • 向 ApplicationUser 表添加唯一约束。如何执行此操作取决于您使用的 EF 迁移策略。
  • 是的,我知道我可以在数据库级别上做到这一点,但我需要通过 Asp.net Identity 做到这一点。以前在数据库级别完成,但我不喜欢该解决方案,主要是因为我必须通过代码处理错误;但如果我使用 Asp.net Identity 处理,错误将存储在模型中。 UserName 没有唯一约束,并且设置为唯一,这就是为什么我问它是如何制作的;这就是为什么我要这样做,因为我知道它可以通过 Asp.net Identity 完成;但问题是不知道怎么做。
  • 您使用的是会员服务提供商吗?*.com/questions/3775182/…

标签: c# asp.net asp.net-mvc asp.net-web-api asp.net-identity


【解决方案1】:

有不同的方法来实现这一点,但不是开箱即用的。但是,您可以使用 Fluent Validation

实现可扩展的验证
[Validator(typeof(ApplicationUserValidator))]
class ApplicationUser : IdentityUser
{
    public string Email { get; set; }
    //...Model implementation omitted
}

public class ApplicationUserValidator : AbstractValidator<ApplicationUser>
{
    public ApplicationUserValidator()
    {

        RuleFor(x => x.Email).Must(IsUniqueEmail).WithMessage("Email already exists");
    }
    private bool IsUniqueEmail(string mail)
    {
        var _db = new DataContext();
        if (_db.NewModel.SingleOrDefault(x => x.Email == mail) == null) return true;
        return false;
    }
    //implementing additional validation for other properties:
    private bool IsUniqueTelephoneNumber(string number)
    {
      //...implement here
    }
}

【讨论】:

  • 没有测试这个解决方案,但我认为这是我需要的。感谢您现在提出的解决方案,我认为最好的解决方案可以适应我的问题,但有一点我不喜欢,它有一个依赖库。没有图书馆怎么能做同样的事情你知道任何例子或从哪里开始吗?非常感谢。
  • 在此处查看接受的答案:*.com/questions/21903355/…。我个人更喜欢 FluentValidation,因为我经常使用它。