J'ai un formulaire sur lequel j'utilise ckeditor. Ce formulaire fonctionnait bien sur Asp.Net 2.0 et 3.5, mais maintenant il ne fonctionne pas dans Asp.Net 4+. J'ai la directive ValidateRequest = "false". Aucune suggestion?
J'ai un formulaire sur lequel j'utilise ckeditor. Ce formulaire fonctionnait bien sur Asp.Net 2.0 et 3.5, mais maintenant il ne fonctionne pas dans Asp.Net 4+. J'ai la directive ValidateRequest = "false". Aucune suggestion?
Réponses:
Solution trouvée sur la page d'erreur. Juste besoin d'ajouter requestValidationMode = "2.0"
<system.web>
<compilation debug="true" targetFramework="4.0" />
<httpRuntime requestValidationMode="2.0" />
</system.web>
Informations MSDN: Propriété HttpRuntimeSection.RequestValidationMode
Il existe un moyen de ramener la validation à 2.0 pour une page. Ajoutez simplement le code ci-dessous à votre web.config:
<configuration>
<location path="XX/YY">
<system.web>
<httpRuntime requestValidationMode="2.0" />
</system.web>
</location>
...
the rest of your configuration
...
</configuration>
Je sais que c'est une vieille question, mais si vous rencontrez ce problème dans MVC 3, vous pouvez décorer votre ActionMethod
avec [ValidateInput(false)]
et simplement désactiver la validation de la demande pour un seul ActionMethod
, ce qui est pratique. Et vous n'avez pas besoin d'apporter de modifications au web.config
fichier, vous pouvez donc toujours utiliser la validation de demande .NET 4 partout ailleurs.
par exemple
[ValidateInput(false)]
public ActionMethod Edit(int id, string value)
{
// Do your own checking of value since it could contain XSS stuff!
return View();
}
Cela fonctionne sans changer le mode de validation.
Vous devez utiliser un System.Web.Helpers.Validation.Unvalidated
assistant de System.Web.WebPages.dll
. Il va retourner un UnvalidatedRequestValues
objet qui permet d'accéder au formulaire et QueryString sans validation.
Par exemple,
var queryValue = Server.UrlDecode(Request.Unvalidated("MyQueryKey"));
Fonctionne pour moi pour MVC3 et .NET 4.
Notez qu'une autre approche consiste à conserver le comportement de validation 4.0, mais à définir votre propre classe qui dérive de RequestValidator
et définit:
<httpRuntime requestValidationType="YourNamespace.YourValidator" />
(où YourNamespace.YourValidator
est bien, vous devriez être capable de deviner ...)
De cette façon, vous conservez les avantages du comportement de la version 4.0 (en particulier, que la validation se produit plus tôt dans le traitement), tout en autorisant également les requêtes que vous devez laisser passer.