2014-03-07 40 views
2

我正在開發一個帶有Visual Studio 2013的WEB API asp.net項目,並且正在實現自定義身份模型以進行自定義註冊。例如,我在RegisterBindingModel中添加了一個電子郵件字段。ASP.NET身份模型的獨特屬性

這是我做了什麼:How to extend asp.net web api 2 user?

我已經添加郵件屬性,我需要的屬性是唯一的(如用戶名),但默認情況下該電子郵件屬性可重複。我的問題是如何使這個電子郵件屬性獨一無二,如用戶名?我讀過可以使用UserValidator設置的獨特屬性,但無法找到。你能告訴我如何使用UserValidator或最好的方式嗎?

如何將UserName屬性定義爲唯一的?我無法在任何地方找到它。

謝謝。

+0

我不明白的可擴展驗證 - 你要使用用戶的電子郵件地址作爲自己的用戶名,或者你想對用戶的附加屬性來保存他們的電子郵件地址?爲什麼不把用戶名作爲電子郵件地址? –

+0

因爲我需要用戶名和郵箱屬性,而我需要知道如何製作獨特的屬性;這是主要問題。因爲誰知道我將來需要將其他領域設置爲獨一無二的領域。感謝您的建議btw – Sid

+0

爲ApplicationUser表添加一個唯一的約束。您如何做到這一點將取決於您使用的EF遷移策略。 –

回答

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 
    } 
} 
+0

沒有測試這個解決方案,但我認爲這是我所需要的。感謝現在提出的解決方案,我認爲最好的方法可以適應我的問題,但有一件事我不喜歡,它有一個依賴庫。如果沒有圖書館,你怎麼能做到這一點,你知道任何例子或從哪裏開始?非常感謝。 – Sid

+1

檢查接受的答案在這裏:http://stackoverflow.com/questions/21903355/compare-email-address-entered-to-database-with-dataannotations/21903709#21903709。 我個人比較喜歡FluentValidation,因爲我經常使用它。 – Marco

+0

這兩個答案都解決了我的問題。 – Sid