Eu tenho um formulário no qual eu uso o ckeditor. Este formulário funcionou bem no Asp.Net 2.0 e 3.5, mas agora não funciona no Asp.Net 4+. Eu tenho a diretiva ValidateRequest = "false". Alguma sugestão?
Eu tenho um formulário no qual eu uso o ckeditor. Este formulário funcionou bem no Asp.Net 2.0 e 3.5, mas agora não funciona no Asp.Net 4+. Eu tenho a diretiva ValidateRequest = "false". Alguma sugestão?
Respostas:
Solução encontrada na página de erro. Só é necessário adicionar requestValidationMode = "2.0"
<system.web>
<compilation debug="true" targetFramework="4.0" />
<httpRuntime requestValidationMode="2.0" />
</system.web>
Informações do MSDN: Propriedade HttpRuntimeSection.RequestValidationMode
Existe uma maneira de voltar a validação para 2.0 para uma página. Basta adicionar o código abaixo ao seu web.config:
<configuration>
<location path="XX/YY">
<system.web>
<httpRuntime requestValidationMode="2.0" />
</system.web>
</location>
...
the rest of your configuration
...
</configuration>
Sei que essa é uma pergunta antiga, mas se você encontrar esse problema no MVC 3, poderá decorar o seu ActionMethod
com [ValidateInput(false)]
e simplesmente desativar a validação de solicitação para um único ActionMethod
, o que é útil. E você não precisa fazer alterações no web.config
arquivo, para poder usar a validação de solicitação do .NET 4 em qualquer outro lugar.
por exemplo
[ValidateInput(false)]
public ActionMethod Edit(int id, string value)
{
// Do your own checking of value since it could contain XSS stuff!
return View();
}
Isso funciona sem alterar o modo de validação.
Você tem que usar um System.Web.Helpers.Validation.Unvalidated
ajudante de System.Web.WebPages.dll
. Ele retornará um UnvalidatedRequestValues
objeto que permite acessar o formulário e QueryString sem validação.
Por exemplo,
var queryValue = Server.UrlDecode(Request.Unvalidated("MyQueryKey"));
Funciona para mim no MVC3 e no .NET 4.
Observe que outra abordagem é manter o comportamento de validação 4.0, mas definir sua própria classe que deriva RequestValidator
e define:
<httpRuntime requestValidationType="YourNamespace.YourValidator" />
(onde YourNamespace.YourValidator
está bem, você deve ser capaz de adivinhar ...)
Dessa forma, você mantém as vantagens do comportamento do 4.0s (especificamente, que a validação ocorre no início do processamento), além de permitir as solicitações que você precisa deixar passar.