Pregunta

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

Paso 1 : cuando intento enviar un formulario con un campo que contiene " < " personaje, me sale el & "; 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 " < " carácter sin error.

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

PERO cuando uso: [RegularExpression (& Quot; ^ [^ & Lt; & Gt;] * $ & Quot ;, ErrorMessage = & Quot; No se permiten caracteres especiales. ")], me sale el " Solicitud de peligros potencialmente peligrosos ... " error nuevamente , a pesar de la directiva [ValidateInput (false)].

¿Qué está pasando? ¿Existe una forma más simple 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.

¿Fue útil?

Solución

  

No, fue un problema en MVC 1 + xVal.   En MVC 2 la validación funciona como   supuesta (y no hay necesidad de xVal   más) & # 8211; Alex42

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

Otros consejos

Estoy usando xVal & amp; nhibernate.validator e intenté reproducir este comportamiento, pero debido a que 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 la carpeta del modelo, y también pasó de largo.

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

Intente validar utilizando 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 Model Binder predeterminado de MVC
  • o hay un problema con el motor de vista 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 el < cuando no debería ser

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

  • use el bucle For para la longitud del texto que se va a probar (para (int i = 1, i < = text.length, ++))
  • verifique que cada carácter comience 1 (por ejemplo, ch = text.substring (i, 1)
  • agrega cada carácter de lectura a la cadena tmp excepto '< o > '

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

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

Pon esta línea en web.config

<httpRuntime requestValidationMode="2.0" />

Esto es un cambio en ASPNET 4.0

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top