Как отключить проверку запроса, не устанавливая RequestValidationMode в 2.0?
Мы только что обновились до ASP.NET 4.0 и обнаружили, что requestValidation больше не работает. Документы MSDN предполагают, что нам нужно установить requestValidationMode в web.config на 2.0:
- 4.0 (по умолчанию). Объект HttpRequest внутренне устанавливает флаг, который указывает, что проверка запроса должна запускаться при каждом обращении к данным HTTP-запроса. Это гарантирует, что проверка запроса инициируется до доступа к таким данным, как файлы cookie и URL-адреса, во время запроса. Параметры проверки запроса для элемента pages (если есть) в файле конфигурации или директивы @ Page на отдельной странице игнорируются.
- 2,0. Проверка запросов включена только для страниц, а не для всех HTTP-запросов. Кроме того, параметры проверки запроса элемента pages (если есть) в файле конфигурации или директивы @ Page на отдельной странице используются для определения того, какие страницы запрашиваются для проверки.
Это будет работать для нас, однако я немного озадачен. Похоже, мы переводим это в устаревший режим совместимости. Конечно, должно быть возможно иметь поведение 4.0, но все еще есть возможность отключить это на странице?
5 ответов
Я нашел способ достичь этого, не меняя RequestValidationMode на 2.0 для всего сайта:
Вы можете создать подкаталог для страницы, для которой вы хотите отключить проверку запросов, и добавить новый web.config в этот каталог с параметром RequestValidationMode, равным 2.0, таким образом, только этот каталог будет работать в режиме 2.0, не затрагивая все другие запросы, которые будут работа в режиме 4.0.
Я думаю, что вы можете добавить раздел местоположения в ваш основной файл web.config, указав только одну страницу, но я еще не проверял это. Что-то вроде этого:
<location path="Admin/Translation.aspx">
<system.web>
<httpRuntime requestValidationMode="2.0"/>
</system.web>
</location>
Надеюсь, это поможет вам, как помог мне!
Лучше всего переопределить requestValidationType своим собственным кодом:
<httpRuntime requestValidationType="YourNamespace.YourValidator" />
MSDN ссылка
Похоже, что это невозможно включить или отключить для страницы в requestValidationMode 4.0.
В этом техническом документе описаны серьезные изменения в.Net 4.0, одним из которых, по-видимому, является. Даже технический документ предлагает вернуться к requestValidationMode 2.0
Чтобы вернуться к поведению функции проверки запросов ASP.NET 2.0, добавьте следующий параметр в файл Web.config:
<httpRuntime requestValidationMode="2.0" />
Хотя это также полезно рекомендует
что вы анализируете любые ошибки проверки запросов, чтобы определить, могут ли существующие обработчики, модули или другой пользовательский код получить доступ к небезопасным входам HTTP, которые могут быть векторами атак XSS.
без каких-либо указаний о том, как лучше всего решить эти проблемы
Установите requestValidationMode="0.0", чтобы отключить проверку страниц ASP.NET и HTTP-запросов. Значение 0,0 распознается в ASP.NET 4,6 и более поздних версиях. MSDN
<configuration>
<system.web>
<httpRuntime requestValidationMode="0.0" />
Вы можете установить ValidateRequest
ложь в директиве страницы:
<%@ Page ValidateRequest="false" %>