ASP.NET MVC ValidateInput (false) pára de funcionar com xVal e [RegularExpression] DataAnnotation
-
10-07-2019 - |
Pergunta
Eu gostaria de interceptar o caractere "<" no campo do formulário por um validador regex. Vou descrever o problema em 3 etapas:
Passo 1 :. Quando tento enviar um formulário com um campo contendo o caractere "<", fico com a "pedido potencialmente perigoso ..." - como esperado em ASP.NET
Passo 2 : Para evitar RequestValidation do ASP.NET, eu decorar meu método de atualização no controlador com "[ValidateInput (false)]".
Ele funciona como esperado -. Agora eu posso postar "<" personagem sem erro
Passo 3 : Eu uso xVal com DataAnnotations. Por exemplo, [Obrigatório] ou [StringLength (255)] funciona como esperado.
mas quando eu uso: [RegularExpression ( "^ [^ <>] * $", ErrorMessage = "Caracteres especiais não são permitidos.")], Recebo o "Potencialmente dangeros pedido ..." erro novamente , apesar da directiva [ValidateInput (false)].
O que está acontecendo? Existe uma maneira mais simples para validaton regex, mas com [ValidateInput (false)] no lugar? Claro, eu gostaria de ter o meu código de validação no modelo, não no controlador.
Solução
Não, era um problema em MVC 1 + xVal. Em MVC 2 a validação funciona como suposto (e não há necessidade de xVal anymore) - Alex42
Parece que o bot continua a empurrar esta para o topo ainda. você pode marcar uma resposta como aceite para que ele sabe?
Outras dicas
Eu estou usando xVal & nhibernate.validator e eu tentei reproduzir esse comportamento, mas porque o validador é amarrado para o lado do cliente eu não poderia obter um valor do passado da validação do lado do cliente. quando eu desativado javascript, ele chegou à validação do lado do servidor, e foi apanhado pelo validador de expressão regular.
Eu tentei a mesma coisa com o uso dos dados anotações atributos de validação e fichário de modelo e tornou passado também.
deve haver algo mais acontecendo que está causando o erro. Desculpe eu não poderia ser mais útil!
Tente validar usando uma regra simples com este método . Isso pode, pelo menos, eliminar xVal a partir da equação. Se os persiste problema, então eu sugiro que está relacionada com qualquer um:
- a implementação do padrão do MVC Modelo Binder
- ou há um problema com o mecanismo de exibição MVC na liberação seu usando que é de alguma forma permitindo uma exceção a ser feita para o atributo que você especificou, validando o
<
quando shoudn't ser
Se apenas um campo, você pode simplesmente escrever uma rotina para olhar para um personagem '
- Para utilização loop para comprimento de texto a ser testado (para (int i = 1, i <= text.length, ++))
- verificar cada personagem começando 1 (por exemplo, ch = text.substring (i, 1)
- adicionar cada personagem leitura para tmp corda exceto '
'
Eu suponho que o método Escape()
estática iria resolver isso para você.
Regex r = new Regex(Regex.Escape(expression));
Coloque esta linha no web.config
<httpRuntime requestValidationMode="2.0" />
Esta é a mudança na ASPNET 4.0