簡體   English   中英

使用 EmailAddressAttribute 驗證 .net 中的電子郵件字符串,但不在屬性上驗證

[英]Validating an email string in .net using EmailAddressAttribute, but not on an attribute

我希望能夠做到這一點:

string email = "some@email.com";
bool isValid = IsValidEmail(email);
//returns true

...但是使用 Microsoft 在EmailAddressAttribute 中已經給我們的邏輯。

IsValidEmail 有數百個好的和壞的實現,我不想添加我自己的,當我可以使用某些東西時,Microsoft 已經考慮過了。 理所當然,他們會比我做得更好。

在最近的 ASP.Net 版本中,我們有 System.ComponentModel.DataAnnotations,它為我們提供了出色的EmailAddressAttribute ,讓我們可以像這樣裝飾我們的模型:

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

該類是密封的,所以我不能調用 EmailAddressAttribute.IsValid()

有沒有什么好方法可以利用微軟已經完成的工作? .Net 框架中是否有某種方法可以讓我針對數據注釋測試字符串,但我忽略了這一點?

類似的東西......:

var emailChecker = new DataAnnotationsChecker<EmailAddressAttribute>();
string email = "some@email.com";
bool isValid = emailChecker.IsValid(email);
//returns true

如果您無法想象我為什么想要這個,請考慮獲取一個列表並檢查哪些是有效的電子郵件。

您可以使用EmailAddressAttribute進行驗證。

sealed意味着您不能創建另一個繼承自它的類。 並不意味着你不能使用它。

創建了一些單元測試並且工作正常

[TestMethod]
public void Should_Use_Email_Address_Attribute_To_Validate_Email() {
    var emailChecker = new System.ComponentModel.DataAnnotations.EmailAddressAttribute();
    string email = "some@email.com";
    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 = "some@emai l.com";
    bool isValid = emailChecker.IsValid(email);
    Assert.IsFalse(isValid);
}

使用郵件地址
這是一種用於讀取和驗證電子郵件地址的有用技術,即使來自“ Elmer Fudd <e.fudd@example.com> ”樣式的輸入(例如從電子郵件客戶端復制粘貼的輸入)。

private string? ExtractEmailAddress(string raw)
{
    try
    {
        var address = new MailAddress(raw);
        return address.Address;
    }
    catch (Exception)
    {
        return null;
    }
}

我還使用[EmailAddress]屬性來指示 API 文檔所需的類型。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM