Mam formularz, w którym używam ckeditor. Ten formularz działał dobrze w Asp.Net 2.0 i 3.5, ale teraz nie działa w Asp.Net 4+. Mam dyrektywę ValidateRequest = "false". Jakieś sugestie?
Mam formularz, w którym używam ckeditor. Ten formularz działał dobrze w Asp.Net 2.0 i 3.5, ale teraz nie działa w Asp.Net 4+. Mam dyrektywę ValidateRequest = "false". Jakieś sugestie?
Odpowiedzi:
Znaleziono rozwiązanie na stronie błędu. Wystarczy dodać requestValidationMode = "2.0"
<system.web>
<compilation debug="true" targetFramework="4.0" />
<httpRuntime requestValidationMode="2.0" />
</system.web>
Informacje MSDN: właściwość HttpRuntimeSection.RequestValidationMode
Istnieje sposób, aby przywrócić walidację z powrotem do wersji 2.0 dla jednej strony. Po prostu dodaj poniższy kod do swojego web.config:
<configuration>
<location path="XX/YY">
<system.web>
<httpRuntime requestValidationMode="2.0" />
</system.web>
</location>
...
the rest of your configuration
...
</configuration>
Wiem, że to stare pytanie, ale jeśli napotkasz ten problem w MVC 3, możesz ozdobić ActionMethod
go [ValidateInput(false)]
i po prostu wyłączyć weryfikację żądań dla pojedynczego ActionMethod
, co jest przydatne. Nie musisz też wprowadzać żadnych zmian w web.config
pliku, więc nadal możesz korzystać z weryfikacji żądań .NET 4 wszędzie indziej.
na przykład
[ValidateInput(false)]
public ActionMethod Edit(int id, string value)
{
// Do your own checking of value since it could contain XSS stuff!
return View();
}
Działa to bez zmiany trybu weryfikacji.
Musisz użyć System.Web.Helpers.Validation.Unvalidated
pomocnika z System.Web.WebPages.dll
. To będzie powrót do UnvalidatedRequestValues
obiektu, który umożliwia dostęp do formularza i QueryString bez walidacji.
Na przykład,
var queryValue = Server.UrlDecode(Request.Unvalidated("MyQueryKey"));
Działa dla mnie na MVC3 i .NET 4.
Zauważ, że innym podejściem jest zachowanie zachowania walidacji 4.0, ale zdefiniowanie własnej klasy, która pochodzi z RequestValidator
i ustawia:
<httpRuntime requestValidationType="YourNamespace.YourValidator" />
(gdzie YourNamespace.YourValidator
jest dobrze, powinieneś zgadywać ...)
W ten sposób zachowujesz zalety zachowania 4.0 (w szczególności walidacja odbywa się na wcześniejszym etapie przetwarzania), a jednocześnie zezwalasz na przepuszczanie żądań.