Ich habe ein Formular, in dem ich ckeditor verwende. Dieses Formular hat in Asp.Net 2.0 und 3.5 gut funktioniert, aber jetzt funktioniert es in Asp.Net 4+ nicht mehr. Ich habe die Anweisung ValidateRequest = "false". Irgendwelche Vorschläge?
Ich habe ein Formular, in dem ich ckeditor verwende. Dieses Formular hat in Asp.Net 2.0 und 3.5 gut funktioniert, aber jetzt funktioniert es in Asp.Net 4+ nicht mehr. Ich habe die Anweisung ValidateRequest = "false". Irgendwelche Vorschläge?
Antworten:
Lösung auf der Fehlerseite gefunden. Nur erforderlich, um requestValidationMode = "2.0" hinzuzufügen
<system.web>
<compilation debug="true" targetFramework="4.0" />
<httpRuntime requestValidationMode="2.0" />
</system.web>
MSDN-Informationen: HttpRuntimeSection.RequestValidationMode-Eigenschaft
Es gibt eine Möglichkeit, die Validierung für eine Seite auf 2.0 zurückzusetzen. Fügen Sie einfach den folgenden Code zu Ihrer web.config hinzu:
<configuration>
<location path="XX/YY">
<system.web>
<httpRuntime requestValidationMode="2.0" />
</system.web>
</location>
...
the rest of your configuration
...
</configuration>
Ich weiß, dass dies eine alte Frage ist, aber wenn Sie in MVC 3 auf dieses Problem stoßen, können Sie Ihre ActionMethodmit dekorieren [ValidateInput(false)]und einfach die Anforderungsvalidierung für eine einzelne deaktivieren ActionMethod, was praktisch ist. Außerdem müssen Sie keine Änderungen an der web.configDatei vornehmen , sodass Sie die .NET 4-Anforderungsüberprüfung weiterhin überall verwenden können.
z.B
[ValidateInput(false)]
public ActionMethod Edit(int id, string value)
{
// Do your own checking of value since it could contain XSS stuff!
return View();
}
Dies funktioniert ohne Änderung des Validierungsmodus.
Sie müssen einen System.Web.Helpers.Validation.UnvalidatedHelfer von verwenden System.Web.WebPages.dll. Es wird ein UnvalidatedRequestValuesObjekt zurückgegeben, mit dem ohne Validierung auf das Formular und QueryString zugegriffen werden kann.
Beispielsweise,
var queryValue = Server.UrlDecode(Request.Unvalidated("MyQueryKey"));
Funktioniert bei mir für MVC3 und .NET 4.
Beachten Sie, dass ein anderer Ansatz darin besteht, das 4.0-Validierungsverhalten beizubehalten, aber Ihre eigene Klasse zu definieren, die von Folgendem abgeleitet RequestValidatorund festgelegt wird:
<httpRuntime requestValidationType="YourNamespace.YourValidator" />
(Wo YourNamespace.YourValidatorist gut, sollten Sie raten können ...)
Auf diese Weise behalten Sie die Vorteile des 4.0-Verhaltens bei (insbesondere, dass die Validierung früher in der Verarbeitung erfolgt) und lassen gleichzeitig die Anforderungen zu, die Sie durchlassen müssen.