Аннотация данных, позволяющая использовать только целые числа для длинных свойств типа данных - PullRequest
0 голосов
/ 03 сентября 2018

У меня есть класс, как показано ниже,

    public class MyClass
    {
        [Required]
        public string Name { get; set; }

        [Required]
        [Range(1, Int64.MaxValue)]
        public long Volume{ get; set; }
    }

И использовал вышеуказанный класс в действии контроллера.

[HttpPost]
public void testAction(, MyClass myClass)
{
var state = ModelState.IsValid;
}

Передача ввода JSON для действия контроллера

Тип ввода 1: {

"Name":"SomeName",
"Volume":12.2

}

Нет ошибки модальной проверки, а входные данные сопоставлены свойству Volume как 12.

Тип ввода 2: {

"Name":"SomeName",
"Volume": "12.2"

}

Ошибка проверки модели: «Ошибка преобразования значения« 12.2 »в тип« System.Int64 »."

Я хочу получить ту же ошибку ошибки проверки модели, которую вводит даже «Громкость»: 12.2

Как этого добиться?

Заранее спасибо.

1 Ответ

0 голосов
/ 03 сентября 2018

Вы можете создать свой собственный ValidationAttribute.

(inputVal % 1) == 0 убедитесь, что входное значение не является числом с плавающей запятой.

public class RangeCustomerAttribute : ValidationAttribute
{
    public long MaxValue { get; set; }
    public long MinValue { get; set; }

    public RangeCustomerAttribute(long minVal, long maxVal)
    {
        MaxValue = maxVal;
        MinValue = minVal;
    }
    public override bool IsValid(object value)
    {
        int inputVal;
        if (value == null)
            return false;

        if (int.TryParse(value.ToString(), out inputVal))
        {

            if (inputVal >= MinValue && inputVal <= MaxValue)
                return (inputVal % 1) == 0;

        }
        return false;
    }
}

используйте как

public class MyClass
{
    [Required]
    public string Name { get; set; }

    [Required]
    [RangeCustomer(1, Int64.MaxValue)]
    public long Volume{ get; set; }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...