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 ActionMethod
mit 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.config
Datei 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.Unvalidated
Helfer von verwenden System.Web.WebPages.dll
. Es wird ein UnvalidatedRequestValues
Objekt 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 RequestValidator
und festgelegt wird:
<httpRuntime requestValidationType="YourNamespace.YourValidator" />
(Wo YourNamespace.YourValidator
ist 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.