Mar*_*tin 9 validation asp.net-mvc three-tier
每次我开始处理新的ASP.NET MVC Web应用程序时,我都不确定是否使用DataAnnotations
验证.关于它的事情感觉不对.
例如,假设我有UserService
一个CreateUserModel
从Create
动作传递的AccountController
.为确保用户始终提供名称,我将模型的Name
属性设置为具有该[Required]
属性.我现在安全地知道模型活页夹CreateUserModel
除非有名字,否则不会给我一个.
我的问题是,为了UserService
成为我系统的可重用组件,它不能依赖上面的层提供有效数据的事实,当然还必须验证这些数据.当您考虑要编写完全重用UserService
(并且不会使用模型绑定器对其进行所有数据注释验证)的Web服务时,对此的需求会进一步突出显示.
所以我的问题是:这种情况的最佳做法是什么?使用数据注释进行验证并在服务中重复该验证?仅在服务中验证并抛出异常?两者兼而有之?
我希望我的问题不是太主观,我主要是试图就是否最终将验证转移到数据注释上达成共识.
你是对的,你应该禁用控制器上的验证并在服务层中进行验证。如果您愿意,您仍然可以使用 DataAnnotations。服务层可以抛出带有验证消息的异常,控制器可以捕获该异常并将验证消息添加到 ModelState。您可以通过处理控制器的 OnException 方法上的验证异常来避免对每个操作执行此操作。
归档时间: |
|
查看次数: |
2749 次 |
最近记录: |