ASP.NET MVC ValidateInput (false) stoppt mit xVal arbeiten und [RegulaererAusdruck] DataAnnotation
-
10-07-2019 - |
Frage
Ich möchte die „<“ Zeichen in das Formularfeld durch einen regex Validator abzufangen. Ich werde das Problem in 3 Schritten beschreiben:
Schritt 1: . Wenn ich versuche, ein Formular mit einem Feld, das die „<“ Zeichen enthält, zu unterbreiten, erhalte ich die „Potentiell gefährliche Anfrage ...“ - wie in ASP.NET erwartet
Schritt 2 : ASP.NET ist RequestValidation zu vermeiden, ich meine Update-Methode in der Steuerung mit "[ValidateInput (false)]" schmücken.
Es funktioniert wie erwartet - jetzt kann ich einstellen „<“ Zeichen ohne Fehler
.Schritt 3: : Ich benutze xVal mit DataAnnotations. Zum Beispiel [Erforderlich] oder [StringLength (255)] wie erwartet funktioniert.
Aber wenn ich verwende: [RegulaererAusdruck ( "^ [^ <>] * $", Errormessage = "Sonderzeichen sind nicht erlaubt.")], Ich erhalte die "Potenziell dangeros Anfrage ..." Fehler wieder trotz der [ValidateInput (false)] Richtlinie.
Was ist los? Gibt es einen einfacheren Weg für regex validaton, aber mit [ValidateInput (false)] anstelle? Natürlich, ich mag meinen Bestätigungscode in dem Modell haben, nicht in der Steuerung.
Lösung
Nein, es war ein Problem in MVC 1 + xVal. In 2 MVC arbeitet die Validierung als soll (und es gibt keine Notwendigkeit für xVal mehr) - Alex42
Sieht aus wie der Bot auf dem Druck dieses eine nach oben hält noch. Könnten Sie eine Antwort markieren, um akzeptiert, dass es weiß?
Andere Tipps
Ich verwende xVal & nhibernate.validator und ich versuchte, dieses Verhalten zu reproduzieren, sondern weil der Prüfer in die Client-Seite gebunden ist konnte ich nicht einen Wert von Vergangenheit der Clientseite Validierung erhalten. wenn ich Sie Javascript deaktiviert, es wurde auf der Server-Seite Validierung und wurde durch den regulären Ausdruck Validator gefangen.
habe ich versucht, die gleiche Sache, um die Daten Anmerkungen Validierung Attribute und Binder Modell mit der Verwendung und es machte es Vergangenheit auch.
Es muss etwas anderes sein los, dass der Fehler verursacht. Leider kann ich nicht mehr hilfreich sein!
Versuchen Sie es mit einer einfachen Regel mit diese Methode . Dies kann zumindest beseitigen xVal aus der Gleichung. Wenn das Problem weiterhin besteht, dann würde ich vorschlagen, es verwandt ist entweder:
- die Implementierung von MVC-Standard Modell Binder
- oder es gibt ein Problem mit dem MVC-Ansicht-Engine in der Veröffentlichung Ihres mit, dass irgendwie ist damit eine Ausnahme für die Sie durch die Validierung der
<
angegebene Attribut gemacht werden, wenn es shoudn't sein
wenn es nur ein Feld, könnte man einfach eine Routine schreibt für ein Zeichen suchen ‚
- Verwendung For-Schleife Textlänge getestet werden (for (int i = 1, i <= text.length, ++))
- überprüfen jedes Zeichen begining 1 (z ch = text.substring (i, 1)
- fügen jedes Zeichen lesen String tmp außer '
Ich nehme an, die statische Methode Escape()
dies für Sie lösen würde.
Regex r = new Regex(Regex.Escape(expression));
Setzen Sie diese Zeile in web.config
<httpRuntime requestValidationMode="2.0" />
Dies ist die Veränderung in ASPNET 4.0