2016-04-29 10 views
5

Voglio essere in grado di fare questo:Convalida una stringa di e-mail in .NET utilizzando EmailAddressAttribute, ma non su un attributo

string email = "[email protected]"; 
bool isValid = IsValidEmail(email); 
//returns true 

... ma usare la logica Microsoft ci ha già dato in EmailAddressAttribute .

Ci sono centinaia di implementazioni buone e cattive di IsValidEmail là fuori, e non voglio aggiungere il mio, quando posso usare qualcosa, Microsoft ci ha già pensato. È ovvio che faranno un lavoro migliore di me.

Nelle versioni recenti ASP.Net, abbiamo System.ComponentModel.DataAnnotations, che ci fornisce l'eccellente EmailAddressAttribute, che ci permette di decorare i nostri modelli come questo:

public class SomeModel 
{ 
    [EmailAddress] 
    public string Email { get; set; } 
} 

Il class is sealed, quindi non posso chiamare EmailAddressAttribute.IsValid()

C'è un buon modo per utilizzare ciò che Microsoft ha già fatto? Esiste un metodo da qualche parte nel framework .Net, che consenta di testare le stringhe contro le annotazioni dei dati, che ho trascurato?

Qualcosa sulla falsariga di ..:

var emailChecker = new DataAnnotationsChecker<EmailAddressAttribute>(); 
string email = "[email protected]"; 
bool isValid = emailChecker.IsValid(email); 
//returns true 

Se non è possibile immaginare perché vorrei questo, pensare di ottenere un elenco e si desidera controllare quali sono le email validi.

risposta

4

È possibile utilizzare lo EmailAddressAttribute per eseguire la convalida.

sealed significa che non è possibile creare un'altra classe che ne eredita. Non significa che non puoi usarlo.

creato alcune unit test e funziona bene

[TestMethod] 
public void Should_Use_Email_Address_Attribute_To_Validate_Email() { 
    var emailChecker = new System.ComponentModel.DataAnnotations.EmailAddressAttribute(); 
    string email = "[email protected]"; 
    bool isValid = emailChecker.IsValid(email); 
    Assert.IsTrue(isValid); 
} 

[TestMethod] 
public void Should_Use_Email_Address_Attribute_To_Invalidate_Email() { 
    var emailChecker = new System.ComponentModel.DataAnnotations.EmailAddressAttribute(); 
    string email = "[email protected] l.com"; 
    bool isValid = emailChecker.IsValid(email); 
    Assert.IsFalse(isValid); 
} 
+0

avrei giurato, ho già provato ... Ma naturalmente questo non nel lavoro fatto. Mi sento sciocco ora. Grazie. :) – Kjensen

+0

Felice di aiutare. (non ti fa sembrare sciocco) :) – Nkosi

+0

Una domanda seria qui: perché questo non è il metodo approvato/accettato di controllare gli indirizzi e-mail in. Net? Microsoft eseguirà la convalida della posta elettronica meglio di chiunque altro. –

Problemi correlati