ASP.NET MVC ValidateInput (false) pára de funcionar com xVal e [RegularExpression] DataAnnotation

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

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.

Foi útil?

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 '' e removê-lo. Você pode conseguir isto, fazendo uso de substring. espero que este isso ajuda

  • 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

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top