ValidateRequest= "false" ne fonctionne pas dans Asp.Net (4)
j'ai un formulaire dans lequel j'utilise ckeditor. Cette forme a bien fonctionné à Asp.Net 2.0 et 3.5 mais maintenant il ne fonctionne pas Asp.Net 4+. J'ai la directive ValidateRequest="false". Toutes les suggestions?
5 réponses
solution trouvée à la page d'erreur. Il suffit d'ajouter requestValidationMode= "2.0"
<system.web>
<compilation debug="true" targetFramework="4.0" />
<httpRuntime requestValidationMode="2.0" />
</system.web>
MSDN information: HttpRuntimeSection.RequestValidationMode Property
il y a un moyen de retourner la validation à 2.0 pour une page. Il suffit d'ajouter le code ci-dessous à votre site 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 alors vous pouvez décorer votre ActionMethod
avec [ValidateInput(false)]
et juste désactiver la validation de la requête pour un seul ActionMethod
, ce qui est pratique. Et vous n'avez pas besoin de modifier le fichier web.config
, donc vous pouvez toujours utiliser la validation de la requête .NET 4 partout ailleurs.
p.ex.
[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
aide System.Web.WebPages.dll
. Il va retourner un objet UnvalidatedRequestValues
qui permet d'accéder au formulaire et aux requêtes 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 à s'en tenir au comportement de validation 4.0, mais à définir votre propre classe qui dérive de RequestValidator
et set:
<httpRuntime requestValidationType="YourNamespace.YourValidator" />
(où YourNamespace.YourValidator
est bien, vous devriez être en mesure de deviner...)
de cette façon vous conservez les avantages du comportement 4.0 s (en particulier, que la validation se produit plus tôt dans le traitement), tout en permettant les requêtes que vous devez laisser passer, à travers.