ASP.NET MVC ValidateInput (false) cesse de fonctionner avec xVal et [RegularExpression] DataAnnotation

StackOverflow https://stackoverflow.com/questions/1038102

Question

Je voudrais intercepter le " < " caractère dans le champ de formulaire par un validateur regex. Je vais décrire le problème en 3 étapes:

Étape 1 : j'essaie de soumettre un formulaire avec un champ contenant le & "; < &"; personnage, je reçois la " demande potentiellement dangereuse ... " - comme prévu dans ASP.NET.

Étape 2 : pour éviter la requête RequestValidation d'ASP.NET, je décore ma méthode de mise à jour dans le contrôleur avec " [ValidateInput (false)] " ;.

Cela fonctionne comme prévu - je peux maintenant publier " < " caractère sans erreur.

Étape 3 : j'utilise xVal avec DataAnnotations. Par exemple, [Obligatoire] ou [StringLength (255)] fonctionne comme prévu.

MAIS lorsque j'utilise: [RegularExpression (& Quot; ^ [^ & Lt; & Gt;]] * $ & Quot ;, ErrorMessage = & Quot; Les caractères spéciaux ne sont pas autorisés. ")], je reçois la & "Requête potentiellement dangereuse ... &"; erreur encore , malgré la directive [ValidateInput (false)].

Qu'est-ce qui se passe? Existe-t-il une méthode plus simple pour la validation de regex, mais avec [ValidateInput (false)] en place? Bien sûr, j'aimerais avoir mon code de validation dans le modèle, pas dans le contrôleur.

Était-ce utile?

La solution

  

Non, c’était un problème dans MVC 1 + xVal.   Dans MVC 2, la validation fonctionne comme   supposé (et il n'y a pas besoin de xVal   plus) & # 8211; Alex42

On dirait que le bot continue de pousser celui-ci au sommet. Pourriez-vous marquer une réponse comme acceptée pour qu'elle sache?

Autres conseils

J'utilise xVal & amp; nhibernate.validator et moi-même avons essayé de reproduire ce problème, mais comme le validateur est lié au côté client, je ne pouvais pas obtenir de valeur antérieure à la validation côté client. lorsque j’ai désactivé javascript, la validation côté serveur a été capturée par le validateur d’expression régulière.

J'ai essayé la même chose en utilisant les attributs de validation des annotations de données et le classeur de modèle, mais cela a également été dépassé.

il doit y avoir quelque chose d'autre qui cause l'erreur. Désolé, je ne pourrais pas être plus utile!

Essayez de valider en utilisant une règle simple avec cette méthode . Cela peut au moins éliminer xVal de l'équation. Si le problème persiste, je suggérerais qu'il soit lié à:

  • l'implémentation du classeur de modèles par défaut de MVC
  • ou il y a un problème avec le moteur de vue MVC dans la version que vous utilisez qui permet en quelque sorte qu'une exception soit faite pour l'attribut que vous avez spécifié en validant le < moment où il ne devrait pas être

s'il ne s'agit que d'un champ, vous pouvez simplement écrire une routine pour rechercher un caractère '< ou > ' et l'enlever. vous pouvez y parvenir en utilisant une sous-chaîne. espérons que cela aide

  • utiliser une boucle allant de la longueur du texte à tester (pour (int i = 1, i < = text.length, ++))
  • vérifie chaque caractère commençant par 1 (par exemple, ch = text.substring (i, 1)
  • ajoute chaque caractère lu à la chaîne tmp sauf '< ou > '

Je suppose que la méthode statique Escape() résoudrait ce problème pour vous.

  Regex r = new Regex(Regex.Escape(expression));

Mettez cette ligne dans web.config

<httpRuntime requestValidationMode="2.0" />

Ceci est un changement dans ASPNET 4.0

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top