ASP.NET MVC ValidateInput (false) перестает работать с xVal и DataAnnotation [RegularExpression] - PullRequest
20 голосов
/ 24 июня 2009

Я бы хотел перехватить символ "<" в поле формы с помощью валидатора регулярных выражений. Я опишу проблему в 3 этапа: </p>

Шаг 1 : Когда я пытаюсь отправить форму с полем, содержащим символ «<», я получаю «Потенциально опасный запрос ...» - как и ожидалось в ASP.NET. </p>

Шаг 2 : Чтобы избежать RequestValidation ASP.NET, я украшаю свой метод Update в контроллере с помощью «[ValidateInput (false)]».

Работает как положено - теперь я могу публиковать символ "<" без ошибок. </p>

Шаг 3 : я использую xVal с аннотациями данных. Например, [Обязательный] или [StringLength (255)] работает должным образом.

НО, когда я использую: [RegularExpression ("^ [^ <>] * $", ErrorMessage = "Специальные символы недопустимы.")], Я снова получаю ошибку "Потенциально опасный запрос ..." , несмотря на директиву [ValidateInput (false)].

Что происходит? Есть ли более простой способ проверки регулярных выражений, но с [ValidateInput (false)] на месте? Конечно, я хотел бы, чтобы мой код проверки был в модели, а не в контроллере.

Ответы [ 6 ]

0 голосов
/ 07 января 2011

Нет, это была проблема в MVC 1 + xVal. В MVC 2 валидация работает как Предполагается (и нет необходимости в xVal больше) - Alex42

Похоже, бот продолжает подталкивать этого к вершине. Не могли бы вы пометить ответ как принятый, чтобы он знал?

0 голосов
/ 10 декабря 2010

Поместите эту строку в web.config

<httpRuntime requestValidationMode="2.0" />

Это изменение в ASPNET 4.0

0 голосов
/ 23 ноября 2010

Полагаю, статический метод Escape() решил бы это за вас.

  Regex r = new Regex(Regex.Escape(expression));
0 голосов
/ 20 ноября 2010

если это просто поле, вы можете написать подпрограмму для поиска символа '<или>' и удалить его. Вы можете достичь этого, используя подстроку. надеюсь, это поможет

  • использовать цикл For для длины тестируемого текста (для (int i = 1, i <= text.length, ++)) </li>
  • проверять каждый символ, начиная с 1 (например, ch = text.substring (i, 1)
  • добавить каждый прочитанный символ в строку tmp, кроме '<или>'
0 голосов
/ 25 ноября 2009

Попробуйте проверить, используя простое правило с этим методом . Это может по крайней мере исключить xVal из уравнения. Если проблема не устраняется, я бы посоветовал, что это связано с:

  • реализация MVC по умолчанию Model Binder
  • или существует проблема с механизмом представления MVC в используемой вами версии, которая каким-то образом позволяет сделать исключение для указанного вами атрибута путем проверки <, когда оно не должно быть
0 голосов
/ 30 июля 2009

Я использую xVal & nhibernate.validator, и я попытался воспроизвести это поведение, но поскольку валидатор привязан к стороне клиента, я не смог получить значение, прошедшее проверку на стороне клиента. когда я отключил javascript, он прошел проверку на стороне сервера и был перехвачен средством проверки регулярных выражений.

Я попробовал то же самое с использованием атрибутов проверки аннотаций данных и связывателя модели, и это также прошло.

должно быть что-то еще, что вызывает ошибку. Извините, я не мог быть более полезным!

...