Я пытаюсь проверить ввод пользователя, в частности пароли пользователей. У меня есть некоторые проверки JQuery, но, конечно, мне также нужно проверить на стороне сервера. Теперь мой запрос поступает к контроллеру, который передает его на UserService
. Все свободно связано, поэтому контроллер действительно не знает слишком много о внутреннем UserService
. Теперь предположим, что пользователь ввел слабый пароль, поэтому мне нужно сказать ему «эй, этого недостаточно».
Вопрос : Каков наилучший способ сделать это?
Почему-то мне нужно позвонить
ModelState.AddModelError(field, exception);
чтобы указать, что пошло не так, где и почему - в простом примере я уже знаю, что это пароль, потому что это действительно единственное поле в форме, но в целом это не так просто. Теперь я был близок к написанию своего собственного Exception
типа, чтобы сделать что-то вроде
ModelState.AddModelError(ex.Field, ex.Message);
, где мне может понадобиться какое-то дополнительное отображение - что существенно для пути, взятого в NerdDinner, где у них есть RuleViolations
.
Однако в NerdDinner бизнес-объект самопроверяется. В данном случае это не лучший способ, потому что «бизнес-объект» здесь - это просто хранилище для электронной почты и пароля, которое реализует IIdentity
. Он не должен ничего знать о длинах паролей и должен использоваться в разных приложениях.
Более того, ArgumentException
и ValidationException
, похоже, тоже не подходят, потому что первое сделано для нарушений контракта, а второе должно использоваться DataAnnotations
.
Все это, конечно, только верхушка айсберга, потому что вокруг так много скрывающихся тонкостей. Возможно, кто-то может указать мне правильное направление?