我正在使用VS2012,ASP MVC4。
我想在我的模型上使用此功能验证新的注册用户电子邮件:
[DataType(DataType.EmailAddress)]
[Display(Name = "Email")]
[EmailAddress]
public string Email { get; set; }
这有效,但我想阻止一些电子邮件网站如何:10minutemail等。我想搜索一个选项,允许我配置DataType电子邮件Anotation或扩展它..
我认为这可以更加干净,这是一个验证所有人的大正则表达式。
非常感谢
答案 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]
标记电子邮件字段。