电子邮件验证MVC4避免邮件站点

时间:2014-05-17 11:49:04

标签: regex asp.net-mvc asp.net-mvc-4 email

我正在使用VS2012,ASP MVC4。

我想在我的模型上使用此功能验证新的注册用户电子邮件:

[DataType(DataType.EmailAddress)]
[Display(Name = "Email")]
[EmailAddress]
public string Email { get; set; }

这有效,但我想阻止一些电子邮件网站如何:10minutemail等。我想搜索一个选项,允许我配置DataType电子邮件Anotation或扩展它..

我认为这可以更加干净,这是一个验证所有人的大正则表达式。

非常感谢

1 个答案:

答案 0 :(得分:3)

您可以创建一个自定义电子邮件验证属性,该属性包装您正在使用的EmailAddressAttribute:

public class CustomEmailValidationAttribute : ValidationAttribute
{
    private string[] blockedProviders = new[]
    {
        "10minutemail.com",
        "some-temporary-email.net"
    };

    protected override ValidationResult IsValid(object value,
        ValidationContext validationContext)
    {
        var emailValidationAttribute = new EmailAddressAttribute();
        if (!emailValidationAttribute.IsValid(value))
            return new ValidationResult("Invalid email");
        bool isBlocked = blockedProviders.Any(pr => ((string)value)
            .EndsWith(pr, StringComparison.InvariantCultureIgnoreCase));
        if (isBlocked)
            return new ValidationResult("Email provider is not allowed");
        return ValidationResult.Success;
    }
}

然后,您可以使用[CustomEmailValidation]而非[EmailAddress]标记电子邮件字段。