通过继承ValidationAttribute并实现IClientModelValidator接口,可扩展ASP.NET Core模型验证,支持前后端自定义规则,如FutureDateAttribute验证日期是否为将来时间,并通过jQuery Validate实现客户端验证。

ASP.NET Core 中的模型验证通过 IModelValidator 和 ValidationAttribute 实现,但若要扩展验证逻辑或集成自定义规则,通常使用自定义验证特性或客户端验证适配器。以下是如何扩展模型验证提供程序的关键方式。
创建自定义验证特性
继承 ValidationAttribute 并重写 IsValid 方法,实现特定业务规则。
例如:验证日期不能早于当前时间可应用于模型属性
public class FutureDateAttribute : ValidationAttribute
{
protected override ValidationResult IsValid(object value, ValidationContext validationContext)
{
if (value is DateTime date && date {
return new ValidationResult(“日期必须是将来时间。”);
}
return ValidationResult.Success;
}
}
在模型中使用:
public class Appointment
{
[FutureDate]
public DateTime Date { get; set; }
}
实现 IClientModelValidator 扩展客户端支持
若需将验证规则输出到前端(如 jQuery Validate),可让自定义特性实现 IClientModelValidator 接口。
添加客户端验证规则(data-* 属性)配合 JavaScript 验证库使用
public class FutureDateAttribute : ValidationAttribute, IClientModelValidator
{
public void AddValidation(ClientModelValidationContext context)
{
context.Attributes.Add(“data-val-futuredate”, this.ErrorMessage);
}
}
然后在客户端注册 jQuery 验证方法:
$.validator.addMethod(“futuredate”, function (value) {
var date = moment(value);
return date.isValid() && date.isAfter();
});
$.validator.unobtrusive.adapters.add(“futuredate”, [], function (options) {
options.rules[“futuredate”] = true;
options.messages[“futuredate”] = options.message;
});
全局注册验证提供程序(高级场景)
可通过替换或扩展现有的 ModelValidatorProvider 来影响整个应用的验证行为。
实现自定义 IModelValidatorProvider在 Startup.ConfigureServices 中插入到 MVC 的验证提供程序集合
services.Configure(options =>
{
options.ModelValidatorProviders.Insert(0, new CustomModelValidatorProvider());
});
适用于需要根据上下文动态生成验证规则的复杂场景。
基本上就这些。核心是结合 ValidationAttribute 与 IClientModelValidator,按需扩展前后端验证逻辑。
以上就是ASP.NET Core 中的模型验证提供程序如何扩展?的详细内容,更多请关注创想鸟其它相关文章!
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/1440524.html
微信扫一扫
支付宝扫一扫