asp.net-mvc - DataAnnotations 或在服务中手动验证?

标签 asp.net-mvc validation three-tier

每次我开始开发一个新的 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/

相关文章:

asp.net-mvc - 一个云服务内有多个 Web 角色?

javascript - 如果一个或多个 if 语句为 false Javascript,如何返回 false 并停止发送电子邮件?

c# - 如何在特定 DataTable 行的剩余列中添加值?

c# - 使用 WCF 的三层架构

c# - 日期时间格式不正确

javascript - 在 .net MVC 中使用 jquery 变量作为 ActionLink 的参数

jquery - 如何限制 HTML5 输入类型 ="number"的用户输入字符长度?

asp.net-mvc - 模型在我的解决方案中属于什么位置?

asp.net-mvc - ELMAH 中未记录的错误

javascript - 带小数和单位的负/正值