基于DataType的模型验证

本文关键字:验证 模型 DataType 基于 | 更新日期: 2023-09-27 18:27:12

我有一个项目,有一个经典的三层结构:DataStore、BusinessLogic、Web前端

在DataStore中,我有一个模型(简化),例如ConfigModel.cs:

public class ConfigModel
{
    [DataType(DataType.EmailAddress)]
    public string DefaultSenderEmail { get; set; }
    public IPAddress FallbackDNS { get; set; }
}

问题来了:

根据实际的DataType或DataType属性以编程方式添加验证器的优雅方法是什么

到目前为止,我认为自己有几个答案,但并不满意:

  • 在参数中添加[EmailAddress]验证属性:我不希望重复,也不希望在DataStore层中引用MVC特定的代码。

  • 制作单独的ViewModel并使用AutoMapper:由于我的一些模型比这复杂得多,我不想制作特定的ViewModel。

谢谢!

基于DataType的模型验证

我也会考虑使用AutoMapper,但不是作为这个解决方案的答案。

也许你可以考虑一下:http://weblogs.asp.net/srkirkland/archive/2011/02/15/adding-client-validation-to-dataannotations-datatype-attribute.aspx

这不是重复。DataType用于不同的目的,而验证则是另一回事。尽管它们听起来可能相同(特别是对于EmailAddress),但不应将两者都用作重复。此外,对于不可为null的类型,验证是自动控制的——它们被标记为Required。还会自动检查日期时间的有效格式。

您肯定会讨厌的是控制用户可以使用BindAttribute编辑域模型的哪些属性,以及在使用不同视图时控制同一模型上的不同验证。所以使用ViewModels吧!用web应用程序所需的所有属性装饰它们,并使用AutoMapper 映射回域模型

您可能还想查看FluentValidation