2009-06-24 6 views
20

Vorrei intercettare il carattere "<" nel campo modulo da un validatore regex. Mi limiterò a descrivere il problema in 3 fasi:ASP.NET MVC ValidateInput (false) smette di funzionare con xVal e [RegularExpression] DataAnnotation

Fase 1: Quando cerco di inviare un modulo con un campo che contiene il carattere "<", ho la "richiesta potenzialmente pericolosa ..." - come previsto in ASP.NET.

Passaggio 2: Per evitare la RequestValidation di ASP.NET, decorare il mio metodo di aggiornamento nel controller con "[ValidateInput (false)]".

Funziona come previsto - ora posso inviare il carattere "<" senza errori.

Passaggio 3: utilizzo xVal con DataAnnotations. Ad esempio, [Richiesto] o [StringLength (255)] funziona come previsto.

ma quando uso: [espressione regolare ("I caratteri speciali non sono ammessi" "^ [^ <>] * $", ErrorMessage =)], ho la "richiesta di Potenzialmente dangeros ... "errore ancora, nonostante la direttiva [ValidateInput (false)].

Cosa sta succedendo? Esiste un modo più semplice per la validazione della regex, ma con [ValidateInput (false)] in posizione? Certo, mi piacerebbe avere il mio codice di convalida nel modello, non nel controller.

+2

Dato che il SO Community Bot ha spinto questo verso l'alto, puoi confermare se questo è ancora un problema? –

+2

No, è stato un problema in MVC 1 + xVal. In MVC 2 la convalida funziona come supposto (e non c'è più bisogno di xVal). – Alex42

risposta

0

No, non era un problema in MVC 1 + xVal. In MVC 2 la validazione funziona come presunta (e non c'è bisogno di xVal più) - Alex42

Sembra che il bot continua a spingere questo verso l'alto ancora. Potresti contrassegnare una risposta come accettata in modo che sappia?

0

Sto usando xval & nhibernate.validator e ho provato a riprodurre questo comportamento, ma poiché il validatore è legato al lato client, non sono riuscito a ottenere un valore oltre la convalida del lato client. quando ho disabilitato javascript, è arrivato alla convalida del server, ed è stato catturato dal validatore di espressioni regolari.

Ho provato la stessa cosa utilizzando gli attributi di convalida delle annotazioni dei dati e il raccoglitore del modello e lo ha superato anche.

ci deve essere qualcos'altro che sta causando l'errore. Scusa non potrei essere più utile!

0

Provare a convalidare utilizzando una regola semplice con this method. Questo può almeno eliminare xVal dall'equazione. Se il problema persiste, allora io suggerirei è legato a uno:

  • l'attuazione di default di MVC modello Binder
  • o c'è un problema con il motore di visualizzazione MVC nella release vostro usando ciò che è in qualche modo consentire un'eccezione essere fatta per l'attributo specificato convalidando l'< quando shoudn't essere
0

se solo un campo, si può solo scrivere una routine per cercare un carattere '< o>' e rimuoverlo. puoi ottenere ciò facendo una sottostringa. speranza questo questo aiuta

  • uso ciclo For alla lunghezza di testo da testare (for (int i = 1, i < = text.length, ++))
  • verificare ogni caratteri che inizia 1 (es ch = testo.substring (I, 1)
  • aggiungere ogni lettura personaggio a TMP stringa di eccezione '< o>'
0

Suppongo che il metodo statico Escape() risolverebbe questo per voi.

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

mettere questa linea in web.config

<httpRuntime requestValidationMode="2.0" /> 

Questo è il cambiamento in ASPNET 4,0

Problemi correlati