ASP.NETCoreMVC自定义电子邮件验证,根据选择选项的自定义域
创始人
2024-09-18 03:30:16
0
  1. 在Models文件夹中创建一个名为CustomEmailValidationAttribute.cs的类,并继承ValidationAttribute类。在重写IsValid方法之前,我们需要创建一个接口IValidationAttributeAdapterProvider以确保MVC系统可以解析自定义验证器。

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);
}

}

  1. 实现上一步中引用的IAttributeAdapter接口。创建名为CustomEmailValidationAttributeAdapter.cs的类并继承AttributeAdapterBase类。

using System.ComponentModel.DataAnnotations; using Microsoft.AspNetCore.Mvc.DataAnnotations; using Microsoft.AspNetCore.Mvc.ModelBinding.Validation; using Microsoft.Extensions.Localization;

public class CustomEmailValidationAttributeAdapter : AttributeAdapterBase { public CustomEmailValidationAttributeAdapter(CustomEmailValidationAttribute attribute, IStringLocalizer stringLocalizer) : base(attribute, stringLocalizer) { }

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)

相关内容

热门资讯

透视软件!线上德州辅助工具有哪... 透视软件!线上德州辅助工具有哪些!其实是真的有挂((2021已更新))(哔哩哔哩);玩家必备必赢加哟...
让我来分享经验!雀神广东麻将系... 广东雀神智能插件安装使用版本解析‌,让我来分享经验!雀神广东麻将系统调好(辅助挂)原来是真的有挂(有...
2分钟实锤!德州扑克aa扑克平... 1、2分钟实锤!德州扑克aa扑克平台(辅助挂)透视辅助((2024已更新))(哔哩哔哩);该软件可以...
盘点一款!太浪白城麻将有挂吗(... WePoke高级策略深度解析‌;盘点一款!太浪白城麻将有挂吗(辅助挂)确实真的有挂(有挂规律)-哔哩...
一分钟了解!wepoke有挂吗... 1、一分钟了解!wepoke有挂吗 网上!其实是真的有挂((2022已更新))(哔哩哔哩)。2、we...
透视辅助!雀神广东麻将输赢规律... 透视辅助!雀神广东麻将输赢规律(辅助挂)确实是真的有挂(有挂讲解)-哔哩哔哩;一、雀神广东麻将输赢规...
分享个大家!小甘麻将助赢神器(... 1、分享个大家!小甘麻将助赢神器(辅助挂)其实真的有挂(有挂分析)-哔哩哔哩;详细教程。2、小甘麻将...
1分钟科普!微扑克辅助机器人(... 1分钟科普!微扑克辅助机器人(辅助挂)透视辅助((2023已更新))(哔哩哔哩),您好,微扑克辅助这...
关于!hm3德州辅助怎么购买!... 关于!hm3德州辅助怎么购买!竟然真的有挂((2020已更新))(哔哩哔哩)是由北京得hm3德州黑科...
如何分辨真伪!广东小程序辅助购... 如何分辨真伪!广东小程序辅助购买(辅助挂)确实真的有挂(真是有挂)-哔哩哔哩;玩家必备必赢加哟《13...