每次我开始开发一个新的 ASP.NET MVC Web 应用程序时,我都不确定是否要使用 DataAnnotations
验证。感觉有些不对劲。
例如,假设我有一个 UserService
通过 CreateUserModel
来自 Create
AccountController
的行动.为确保用户始终提供名称,我将模型的 Name
设置为拥有 [Required]
的属性属性。现在我知道模型绑定(bind)器永远不会给我一个 CreateUserModel
除非它有名字。
我的问题是我的 UserService
要成为我系统的可重用组件,它不能依赖上层提供有效数据的事实,并且肯定还必须验证这些数据。当您考虑可能想要编写一个完全重用 UserService
的 Web 服务时,需要进一步强调这一点。 (并且不会让模型绑定(bind)器为其进行所有数据注释验证)。
所以我的问题是:这种情况的最佳做法是什么?使用数据注释进行验证并在服务中重复该验证?仅在服务中验证并抛出异常?两者的混合?
我希望我的问题不是太主观,我主要是想就将验证转移到数据注释是否最终会咬我一口达成共识。
最佳答案
我在服务层执行所有验证,结合使用手动验证(如果 x == y)和使用数据注释。
要在服务层中使用数据注释,您必须手动使用 Validator使用 TryValidateObject()
的类方法。可以看到一个很好的例子here .
然后,您必须将您的验证错误从您的服务层传递到您的 Controller ,并让您的 Controller 将每个错误添加到模型状态错误列表中。
关于asp.net-mvc - DataAnnotations 或在服务中手动验证?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3747575/