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 ответов:
Нет, это была проблема в MVC 1 + xVal. В MVC 2 валидация работает следующим образом предполагается (и нет никакой необходимости в xVal больше) - Alex42
Похоже, что бот продолжает подталкивать этого к вершине. Не могли бы Вы отметить ответ как принятый, чтобы он знал?
Я использую xVal & nhibernate.валидатор и я попытались воспроизвести это поведение, но поскольку валидатор привязан к стороне клиента, я не смог получить значение прошедшей проверки на стороне клиента. когда я отключил javascript, он попал на проверку на стороне сервера и был пойман валидатором регулярных выражений.
Я попробовал то же самое с использованием атрибутов проверки аннотаций данных и связывателя моделей, и это тоже прошло.
Должно быть что-то еще. продолжая это, вы вызываете ошибку. Извините, что не могу быть более полезным!
Попробуйте проверить с помощью простого правила с помощьюэтого метода . Это может, по крайней мере, исключить xVal из уравнения. Если проблема сохраняется, то я бы предположил, что она связана с любым из них:
- реализация Связывателя модели MVC по умолчанию
- или есть проблема с механизмом представления MVC в релизе, который вы используете, который каким-то образом позволяет сделать исключение для атрибута, указанного вами, проверяя
<
, когда он не должен быть
Если это просто поле, вы можете просто написать процедуру для поиска символа '' и удалить его. вы можете достичь этого, используя подстроку. надеюсь, это поможет
- Используйте для цикла к длине текста, который будет проверяться (for (int i=1, i
- проверьте каждый символ, начинающийся с 1 (например, ch = text.подстрока (i, 1)
- Добавьте каждый прочитанный символ в строку tmp, кроме ' '