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

17

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

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

    
задан JC Grubbs 22.09.2009 в 19:06
источник

4 ответа

32

С помощью 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 принадлежат здесь )

    
ответ дан Simon_Weaver 20.04.2010 в 05:43
источник
7

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

    
ответ дан JC Grubbs 22.09.2009 в 19:20
источник
1

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

    
ответ дан Karel Frajták 07.05.2010 в 09:52
источник
0

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

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

    
ответ дан Frank van Eykelen 08.12.2010 в 10:18
источник