J'utilise intensivement la validation des annotations de données dans ASP.NET MVC 2. Cette nouvelle fonctionnalité a fait gagner énormément de temps, car je suis maintenant capable de définir la validation côté client et la validation côté serveur en un seul endroit. Cependant, alors que j'effectuais des tests détaillés, j'ai réalisé qu'il était assez facile pour quelqu'un de contourner la validation côté serveur si je m'appuyais uniquement sur la validation des annotations de données. Par exemple, si j'ai défini un champ obligatoire en annotant la propriété avec l'attribut [Obligatoire] et placé une zone de texte pour ce champ obligatoire dans un formulaire, un utilisateur peut simplement supprimer la zone de texte du DOM (qui peut facilement être effectuée via Firebug) et maintenant la validation d'annotation de données ne sera pas déclenchée sur cette propriété pendant ModelBinding à l'intérieur d'un contrôleur. Pour m'assurer que la validation "requise" est déclenchée, je peux répéter la validation après que ModelBinding se soit passé, mais alors je répéterais ma logique de validation.ASP.NET MVC: la validation des annotations de données est-elle suffisante?
Quelle est la recommandation de chacun sur la validation? La validation des annotations de données est-elle suffisante? Ou faut-il répéter la validation pour s'assurer que les validations se déclenchent dans toutes les situations?
Suivi commentaire: Sur la base des réponses ci-dessous, il semble que je ne peux pas compter sur le modèle Binder et la validation des données Annotation seul. Puisque nous concluons qu'une validation supplémentaire côté serveur est requise, y a-t-il un moyen facile pour ma couche Service de déclencher la validation en fonction de ce qui a été défini dans les annotations de données? Il semble que cela nous permettra d'obtenir le meilleur des deux mots ... nous n'aurons pas besoin de répéter le code de validation, mais nous veillerons à ce que la validation soit exécutée même si Model Binder ne le déclenche pas.
Je vais poster ce commentaire de suivi comme une question distincte, car il pose une question différente de celle d'origine.
Réponse Koritnik répond à votre suivi requête. Je fais ma validation similaire à la réponse qu'il a posté. La même définition DataAnnotation peut être utilisée pour la validation du serveur et du client. –
La validation des annotations de données est correcte si les attributs de validation fournis et le cadre lui-même vous conviennent. Le comportement avec Required a été modifié pour ASP.NET MVC 2 RTM en raison des commentaires de la communauté. Par conséquent, [Required] fonctionne désormais comme prévu. Optinalement, consultez: Bloc de validation (bibliothèque d'entreprise), xVal, NHibernate Validators (supposément n'a aucune dépendance sur NHibernate ORM). – miha
'" Je vais publier ce commentaire de suivi sous la forme d'une question distincte, car elle pose une question différente de celle d'origine. "" Un lien vers ça ne serait pas une mauvaise idée, hein? – Sinjai