asp.net-mvc validation data-annotations xval

ASP.NET MVC ValidateInput(falso) deja de funcionar con xVal y[RegularExpression] DataAnnotation



asp.net-mvc validation (6)

Me gustaría interceptar el carácter "<" en el campo de formulario con un validador de expresiones regulares. Describiré el problema en 3 pasos:

Paso 1 : Cuando intento enviar un formulario con un campo que contiene el carácter "<", obtengo la "Solicitud potencialmente peligrosa ...", como se esperaba en ASP.NET.

Paso 2 : Para evitar la Validación de Solicitud de ASP.NET, decoro mi método de Actualización en el controlador con "[ValidateInput (false)]".

Funciona como se esperaba, ahora puedo publicar el carácter "<" sin error.

Paso 3 : uso xVal con DataAnnotations. Por ejemplo, [Necesario] o [StringLength (255)] funciona como se espera.

PERO cuando uso: [RegularExpression ("^ [^ <>] * $", ErrorMessage = "No se permiten los caracteres especiales.")], Recibo nuevamente el error "Potentially dangeros request ..." , a pesar del [ValidateInput (falso)] directiva.

¿Qué esta pasando? ¿Existe una forma más sencilla de validación de expresiones regulares, pero con [ValidateInput (false)] en su lugar? Por supuesto, me gustaría tener mi código de validación en el modelo, no en el controlador.


No, fue un problema en MVC 1 + xVal. En MVC 2, la validación funciona como se supone (y ya no hay necesidad de xVal) - Alex42

Parece que el bot sigue empujando este a la parte superior todavía. ¿Podrías marcar una respuesta como aceptada para que sepa?


Estoy usando xVal & nhibernate.validator y traté de reproducir este comportamiento, pero como el validador está vinculado al lado del cliente, no pude obtener un valor de más allá de la validación del lado del cliente. cuando deshabilité javascript, llegó a la validación del lado del servidor y fue capturado por el validador de expresiones regulares.

Intenté lo mismo con el uso de los atributos de validación de anotaciones de datos y el archivador de modelos y también lo superé.

Debe haber algo más que esté causando el error. Lo siento, no podría ser más útil!


Intenta validar usando una regla simple con este método . Esto puede al menos eliminar xVal de la ecuación. Si el problema persiste, sugiero que esté relacionado con:

  • La implementación del modelo de carpeta predeterminado de MVC.
  • o hay un problema con el motor de visualización MVC en el lanzamiento que está usando, que de alguna manera permite que se haga una excepción para el atributo que especificó al validar < cuando no debería ser

Pon esta línea en web.config

<httpRuntime requestValidationMode="2.0" />

Esto es cambio en ASPNET 4.0


Supongo que el método estático Escape() resolvería esto por ti.

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


si solo es un campo, puede escribir una rutina para buscar un carácter ''<o>'' y eliminarlo. Usted puede lograr esto haciendo uso de subcadena. espero que esto ayude

  • use For loop para la longitud del texto a probar (para (int i = 1, i <= text.length, ++))
  • verifique que cada carácter comience por 1 (por ejemplo, ch = text.substring (i, 1)
  • agregue cada carácter leído a la cadena tmp excepto ''<o>''