ValidateRequest = "false" не работает в Asp.Net 4 - PullRequest
153 голосов
/ 20 апреля 2010

У меня есть форма, в которой я использую ckeditor. Эта форма отлично работала в Asp.Net 2.0 и 3.5, но теперь она не работает в Asp.Net 4+. У меня есть ValidateRequest = "ложная" директива. Есть предложения?

Ответы [ 5 ]

191 голосов
/ 20 апреля 2010

Нашли решение на странице ошибок. Просто нужно добавить requestValidationMode = "2.0"

<system.web>
    <compilation debug="true" targetFramework="4.0" />
    <httpRuntime requestValidationMode="2.0" />
</system.web>

Информация MSDN: Свойство HttpRuntimeSection.RequestValidationMode

99 голосов
/ 24 ноября 2010

Существует способ повернуть проверку обратно на 2.0 для одной страницы. Просто добавьте следующий код в ваш web.config:

<configuration>
    <location path="XX/YY">
        <system.web>
            <httpRuntime requestValidationMode="2.0" />
        </system.web>
    </location>

    ...
    the rest of your configuration
    ...

</configuration>
56 голосов
/ 13 июня 2012

Я знаю, что это старый вопрос, но если вы столкнулись с этой проблемой в MVC 3, тогда вы можете украсить свой ActionMethod с помощью [ValidateInput(false)] и просто отключить проверку запроса для одного ActionMethod, что удобно. И вам не нужно вносить какие-либо изменения в файл web.config, поэтому вы все равно можете использовать проверку запросов .NET 4 везде.

, например

[ValidateInput(false)]
public ActionMethod Edit(int id, string value)
{
    // Do your own checking of value since it could contain XSS stuff!
    return View();
}
28 голосов
/ 16 июня 2011

Работает без изменения режима проверки.

Вы должны использовать System.Web.Helpers.Validation.Unvalidated помощник из System.Web.WebPages.dll. Он собирается вернуть объект UnvalidatedRequestValues, который позволяет получить доступ к форме и QueryString без проверки.

Например,

var queryValue = Server.UrlDecode(Request.Unvalidated("MyQueryKey"));

У меня работает для MVC3 и .NET 4.

15 голосов
/ 03 февраля 2012

Обратите внимание, что другой подход состоит в том, чтобы придерживаться поведения проверки 4.0, но определить свой собственный класс, который получается из RequestValidator и установить:

<httpRuntime requestValidationType="YourNamespace.YourValidator" />

(где YourNamespace.YourValidator хорошо, вы должныбыть в состоянии угадать ...)

Таким образом, вы сохраняете преимущества поведения 4.0s (в частности, что проверка происходит раньше при обработке), и в то же время разрешаете запросы, которые необходимо пропустить.

...