ASP.NET MVC ValidateInput(false) перестает работать с xVal и [RegularExpression] DataAnnotation

StackOverflow https://stackoverflow.com/questions/1038102

Вопрос

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

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

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

Это работает, как и ожидалось - теперь я могу публиковать сообщения ".<" символ без ошибок.

Шаг 3:Я использую xVal с DataAnnotations.Например, [Required] или [StringLength(255)] работает так, как ожидалось.

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

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

Это было полезно?

Решение

  

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

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

Другие советы

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

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

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

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

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

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

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

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

  Regex r = new Regex(Regex.Escape(expression));

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

<httpRuntime requestValidationMode="2.0" />

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top