开箱即用,.NET 4.5 具有 System.ComponentModel.DataAnnotations.EmailAddressAttribute 可在 System.ComponentModel.DataAnnotations 程序集中找到,但这仅限于验证一个电子邮件地址。因此,如果您有一个接受分隔电子邮件地址的模型并使用此属性装饰属性,它将失败,因为它将整个字符串视为一封电子邮件。
我所做的是创建一个扩展的 emailaddress 属性来验证分隔的电子邮件地址:
[AttributeUsage(AttributeTargets.Property | AttributeTargets.Field | AttributeTargets.Parameter, AllowMultiple = false)]
public class EmailAddressExAttribute : DataTypeAttribute
{
#region privates
private readonly EmailAddressAttribute _emailAddressAttribute = new EmailAddressAttribute();
#endregion
#region ctor
public EmailAddressExAttribute() : base(DataType.EmailAddress){ }
#endregion
#region Overrides
/// <summary>
/// Checks if the value is valid
/// </summary>
/// <param name="value"></param>
/// <returns></returns>
public override bool IsValid(object value)
{
var emailAddr = Convert.ToString(value);
if (string.IsNullOrWhiteSpace(emailAddr)) return false;
//lets test for mulitple email addresses
var emails = emailAddr.Split(new[] {';', ' ', ','}, StringSplitOptions.RemoveEmptyEntries);
return emails.All(t => _emailAddressAttribute.IsValid(t));
}
#endregion
}
您现在可以使用这个新的扩展属性装饰任何字符串属性,以验证分隔的电子邮件地址。您可以更新分隔符以包含您想要使用的任何特殊字符。
希望这可以帮助!