ASP.NET MVC ValidateInput (false) smette di funzionare con xVal e [RegularExpression] DataAnnotation

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

Domanda

Vorrei intercettare il " < " carattere nel campo modulo da un validatore regex. Descriverò il problema in 3 passaggi:

Passaggio 1 : quando provo a inviare un modulo con un campo contenente il " < " carattere, ottengo il " Richiesta potenzialmente pericolosa ... " - come previsto in ASP.NET.

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

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

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

MA quando uso: [RegularExpression (& Quot; ^ [^ & Lt; & Gt;] * $ & Quot ;, ErrorMessage = & Quot; Non sono ammessi caratteri speciali. ")], Ottengo il " Richiesta potenzialmente pericolosa ... " errore di nuovo , nonostante la direttiva [ValidateInput (false)].

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

È stato utile?

Soluzione

  

No, si è verificato un problema in MVC 1 + xVal.   In MVC 2 la validazione funziona come   supposto (e non è necessario per xVal   più) & # 8211; Alex42

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

Altri suggerimenti

Sto usando xVal & amp; Io e nhibernate.validator abbiamo provato a riprodurre questo comportamento ma poiché il validatore è legato al lato client non ho potuto ottenere un valore oltre la convalida lato client. quando ho disabilitato JavaScript, è arrivato alla convalida lato server ed è stato catturato dal validatore di espressioni regolari.

Ho provato la stessa cosa usando gli attributi di convalida delle annotazioni dei dati e il raccoglitore di modelli e anche questo ha superato.

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

Prova a convalidare usando una semplice regola con questo metodo . Questo può almeno eliminare xVal dall'equazione. Se il problema persiste, suggerirei che è correlato a:

  • l'implementazione del Model Binder predefinito di MVC
  • o c'è un problema con il motore di visualizzazione MVC nella versione che stai usando, che in qualche modo consente di fare un'eccezione per l'attributo specificato convalidando < quando non dovrebbe essere

se è solo un campo, potresti semplicemente scrivere una routine per cercare un carattere '< o > ' e rimuoverlo. puoi ottenere ciò usando la sottostringa. spero che questo aiuti

  • usa For loop per la lunghezza del testo da testare (per (int i = 1, i < = text.length, ++))
  • verifica ogni carattere che inizia 1 (es. ch = text.substring (i, 1)
  • aggiungi ogni carattere letto alla stringa tmp tranne '< o > '

Suppongo che il metodo statico Escape() lo risolva per te.

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

Inserisci questa riga in web.config

<httpRuntime requestValidationMode="2.0" />

Questa è una modifica in ASPNET 4.0

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top