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


Я хотел бы перехватить символ "

Шаг 1: Когда я пытаюсь отправить форму с полем, содержащим символ"

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

Это работает, как и ожидалось - теперь я могу опубликовать символ "

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

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

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

6 20

6 ответов:

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

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

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

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

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

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

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

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

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

Я полагаю, что статический метод Escape() решит эту проблему для вас.

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

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

<httpRuntime requestValidationMode="2.0" />

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