using System.ComponentModel.DataAnnotations; using Microsoft.AspNetCore.Mvc.DataAnnotations; using Microsoft.AspNetCore.Mvc.ModelBinding.Validation;
public class CustomEmailValidationAttribute : ValidationAttribute, IValidationAttributeAdapterProvider { private string _allowedDomain;
public CustomEmailValidationAttribute(string allowedDomain)
{
_allowedDomain = allowedDomain;
ErrorMessage = $"Email domain must be '{_allowedDomain}'";
}
protected override ValidationResult IsValid(object value, ValidationContext validationContext)
{
if (value != null)
{
var email = value.ToString().ToLower();
if (email.EndsWith($"@{_allowedDomain}"))
{
return ValidationResult.Success;
}
}
return new ValidationResult(ErrorMessage);
}
public IAttributeAdapter GetAttributeAdapter(ValidationAttribute attribute, IStringLocalizer stringLocalizer)
{
return new CustomEmailValidationAttributeAdapter((CustomEmailValidationAttribute)attribute, stringLocalizer);
}
}
using System.ComponentModel.DataAnnotations; using Microsoft.AspNetCore.Mvc.DataAnnotations; using Microsoft.AspNetCore.Mvc.ModelBinding.Validation; using Microsoft.Extensions.Localization;
public class CustomEmailValidationAttributeAdapter : AttributeAdapterBase
public override void AddValidation(ClientModelValidationContext context)
{
MergeAttribute(context.Attributes, "data-val", "true");
MergeAttribute(context.Attributes, "data-val-customemail", GetErrorMessage(context));
MergeAttribute(context.Attributes, "data-val-customemail-domain", Attribute._allowedDomain);
}
public override string GetErrorMessage(ModelValidationContextBase validationContext)
{
return Attribute.ErrorMessage;
}
private bool MergeAttribute(IDictionary attributes, string key, string value)