【发布时间】:2010-03-09 22:30:18
【问题描述】:
我正在尝试验证用户输入,尤其是用户密码。我有一些 jQuery 验证,但当然我还需要在服务器端进行验证。现在我的请求进入控制器,控制器会将其交给UserService。一切都是松耦合的,所以控制器对内部的UserService真的不太了解。现在假设用户输入了一个弱密码,所以我需要告诉他“嘿,这还不够。”
问题是:最好的方法是什么?
不知何故,我需要能够打电话
ModelState.AddModelError(field, exception);
为了指出出错的地方、位置和原因——在这个简单的例子中,我已经知道它是密码,因为它确实是表单上唯一的字段,但总的来说这并不容易。现在我快要编写自己的 Exception 类型来做类似的事情了
ModelState.AddModelError(ex.Field, ex.Message);,我可能需要一些额外的映射 - 这是在 NerdDinner 中使用的路径,他们有 RuleViolations。
但是,在 NerdDinner 中,业务对象是自我验证的。在这种情况下,这似乎不是最好的方法,因为这里的“业务对象”实际上只是实现IIdentity 的电子邮件和密码的存储。它不应该知道任何关于密码长度的信息,并且应该可以在不同的应用程序中重复使用。
此外,ArgumentException 和 ValidationException 似乎也不适合,因为前者用于违反合同,而后者用于 DataAnnotations。
所有这些当然只是冰山一角,因为潜伏着许多微妙之处。也许有人可以指出我正确的方向?
【问题讨论】:
标签: asp.net-mvc asp.net-mvc-2 validation