首页 文章

具有ASP.NET标识的模型的唯一属性

提问于
浏览
2

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

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

我添加了电子邮件属性,我需要该属性是唯一的(作为UserName),但默认情况下可以重复该电子邮件属性 . 我的问题是如何使这个电子邮件属性与UserName一样独特?我已经读过可以使用UserValidator设置唯一属性,但无法找到 . 你能用UserValidator或者最好的方式告诉我如何做到这一点吗?

如何将UserName属性定义为唯一?我找不到任何地方 .

谢谢 .

1 回答

  • 3

    有不同的方法来实现这一点,但不是开箱即用 . 但是,您可以使用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
        }
    }
    

相关问题