繁体   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