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

时间:2014-03-07 03:42:06

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

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

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

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

UserName属性如何定义为唯一?我无法在任何地方找到它。

谢谢。

1 个答案:

答案 0 :(得分: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
    }
}