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?

151
demandé sur x-freestyler 2010-04-20 13:08:52

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

189
répondu x-freestyler 2015-06-04 08:53:12

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>
97
répondu Ben Hoffman 2018-02-27 08:44:58

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();
}
50
répondu Tom Chantler 2012-06-13 16:24:19

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.

26
répondu Szymon Sasin 2015-02-03 15:00:50

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.

15
répondu Jon Hanna 2012-02-03 14:52:20