使用EmailAddressAttribute验证.net中的电子邮件字符串,但不在属性上验证

Kje*_*sen 11 .net c# data-annotations

我希望能够这样做:

string email = "some@email.com";
bool isValid = IsValidEmail(email);
//returns true
Run Code Online (Sandbox Code Playgroud)

...但是使用Microsoft已经在EmailAddressAttribute中提供的逻辑.

IsValidEmail有数百个好的和坏的实现,当我可以使用微软已经考虑过的东西时,我不想添加自己的.按理说,他们会比我做得更好.

在最近的ASP.Net版本中,我们有System.ComponentModel.DataAnnotations,它为我们提供了优秀的EmailAddressAttribute,它允许我们像这样装饰我们的模型:

public class SomeModel
{
    [EmailAddress]
    public string Email { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

这个类是密封的,所以我不能调用EmailAddressAttribute.IsValid()

有没有一种好方法可以利用微软已经做过的事情?在.Net框架中的某个地方是否有一个方法,让我测试字符串对数据注释,我忽略了?

有点像......:

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

如果您无法想象为什么我会想要这个,请考虑获取一个List并想要检查哪些是有效的电子邮件.

Nko*_*osi 14

您可以使用它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);
}
Run Code Online (Sandbox Code Playgroud)

  • 我将添加一些我发现的相对于"有效"的东西.使用示例电子邮件地址"mark @ gmailcom" - 使用System.Net.Mail.MailAddress检查有效性将返回true,因为从技术上讲它是.EmailAddressAttribute IsValid返回false,因为缺少点.出于我的目的,如果没有域部分中的点,则地址无效. (4认同)
  • 我发誓,我已经试过了……但当然这确实有效。我现在觉得很傻。谢谢。:) (2认同)