基于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。
谢谢!
我也会考虑使用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