Атрибут ValidateInput не подходит для работы в ASP.NET MVC

Я пытаюсь обойти "потенциально опасную ошибку Request.Form", и мне не повезло. Да, да, я прочитал все другие вопросы, связанные с StackOverflow, и ни один из них, похоже, не приблизил меня к ответу. Я использую [ValidateInput(false)] для всех связанных действий с контроллером... и я проверял много раз. Я использую ValidateRequest='false' во всех связанных ASPX-представлениях.

Я использую ASP.NET MVC 2 Preview 1, но я не думаю, что проблема, поскольку ошибка генерируется ниже в рамках; PagePProcessRequest, если быть точным. Я не вижу ничего, что я делаю неправильно, я даже установил <page validateRequest='false'> в web.config, и это тоже не решило.

Ответы

Ответ 1

С помощью asp.net 4 вам также нужно настроить режим проверки в файле web.config.

Задайте в качестве дочернего элемента <system.web> следующее:

<httpRuntime requestValidationMode="2.0"/>

Asp.Net 4 по умолчанию задает requestValidationMode 4.0, который сообщает системе выполнить проверку запроса до этапа BeginRequst HTTP-запроса. Проверка будет происходить до того, как система достигнет атрибута действия, в котором говорится, что он не проверяет запрос, тем самым делая атрибут бесполезным. Установка requestValidationMode = "2.0" вернется к проверке поведения запроса asp.net 2.0, позволяя атрибуту ValidateInput работать должным образом.

(спасибо Jim - upvotes принадлежат здесь)

Ответ 2

Ну... ответил на мою собственную проблему... виновник: Html.RenderAction<T>. Если есть какие-либо вызовы других действий в контексте запроса (например, с главной страницы или дочерних частей), эти действия также должны иметь [ValidateInput(false)]. Это кажется немного проблемой, хотя с MVC или тем, как объект страницы работает в ASP.NET, поскольку это действительно запутанная ошибка для поиска.

Ответ 3

Вы должны добавить атрибут к каждому действию контроллера, которое вызывается во время вашего запроса, т.е. проверять все частичные запросы.

Ответ 4

Обратите внимание, что эти рекомендации не будут устранять проблемы, вызванные ошибкой, возникающей, когда вы должны использовать [ValidateInput (false)] в сочетании с FormCollection.

Смотрите: ASP.NET MVC 3 ValidateRequest (false) не работает с FormCollection