ValidateRequest = "false" не работает в Asp.Net 4
У меня есть форма, в которой я использую ckeditor. Эта форма отлично работала в Asp.Net 2.0 и 3.5, но теперь она не работает в Asp.Net 4+. У меня есть ValidateRequest = "false" директива. Любые предложения?
Ответы
Ответ 1
Найдено решение на странице ошибки. Просто нужно добавить requestValidationMode = "2.0"
<system.web>
<compilation debug="true" targetFramework="4.0" />
<httpRuntime requestValidationMode="2.0" />
</system.web>
Информация MSDN: Свойство HttpRuntimeSection.RequestValidationMode
Ответ 2
Есть способ включить проверку на 2.0 для одной страницы. Просто добавьте приведенный ниже код в свой web.config:
<location path="XX/YY">
<system.web>
<httpRuntime requestValidationMode="2.0" />
</system.web>
</location>
Ответ 3
Я знаю, что это старый вопрос, но если вы столкнулись с этой проблемой в 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();
}
Ответ 4
Это работает без изменения режима проверки.
Вы должны использовать вспомогательный System.Web.Helpers.Validation.Unvalidated
от System.Web.WebPages.dll
. Он вернет объект UnvalidatedRequestValues
, который позволяет получить доступ к форме и QueryString без проверки.
Например,
var queryValue = Server.UrlDecode(Request.Unvalidated("MyQueryKey"));
Работает для меня для MVC3 и .NET 4.
Ответ 5
Обратите внимание, что другой подход заключается в том, чтобы придерживаться поведения проверки 4.0, но для определения собственного класса, полученного из RequestValidator
, и установки:
<httpRuntime requestValidationType="YourNamespace.YourValidator" />
(где YourNamespace.YourValidator
хорошо, вы должны угадать...)
Таким образом, вы сохраняете преимущества поведения 4.0s (в частности, что проверка выполняется раньше в процессе обработки), а также позволяет выполнять запросы, которые вам нужно пропустить через.