Вопрос

Я пытаюсь найти лучший способ проверки данных в приложении MVC C#, и xVal, похоже, подходит лучше всего.Однако у меня возникла проблема с проверкой типа данных.

Сначала я выполнял UpdateModel в DTO, а затем запускал проверку DTO.Это отлично работало для таких вещей, как обязательные поля, однако UpdateModel выдавало исключение, если вы пытались, например, сопоставить строку («asd») с десятичным полем.Поскольку UpdateModel нужно было запустить до того, как появились какие-либо данные для проверки, я не был уверен, как это обойти.

Мое решение состояло в том, чтобы создать DTO для каждой формы, в которую UpdateModel будет копировать, запускать проверку, а затем копировать значения в соответствующие DTO.Все атрибуты в форме DTO будут строками, поэтому UpdateModel никогда не выйдет из строя, и я бы обеспечил проверку данных через xVal.Однако, хотя такие правила, как требуемые, срабатывают, я не могу заставить сработать правило DataType (в данном случае пытаюсь DataType.Currency).

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

Что другие сделали для проверки типов данных на стороне сервера?

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

Решение

В итоге я создал несколько DTO, представляющих формы.Эти DTO будут принимать Request.Form и автоматически сопоставлять все значения формы с внутренними свойствами (например, адрес электронной почты общедоступной строки, имя общедоступной строки), основываясь на том, что они имеют то же имя, что и значения формы.

У них будут все строковые свойства, и я бы поместил в них атрибуты xVal.Затем я использовал xVal и регулярные выражения, чтобы убедиться, что поступающие данные действительны (например, действительная дата, адрес электронной почты, номер и т. д.).Таким образом, никогда не будет выброшено исключение, потому что оно всегда входило в строку, в отличие от .Net, пытающегося проанализировать его на дату или что-то в этом роде.

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

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

Я использую специальные валидаторы, производные от ValidationAttribute, для проверки данных, которые должны быть проанализированы на стороне сервера, от строки до других типов данных.Например:

public class DateAttribute : ValidationAttribute
    {

        public override bool IsValid(object value)
        {
            var date = (string)value;
            DateTime result;
            return DateTime.TryParse(date, out result);
        }
    }

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

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