Стандартный способ передачи ввода в WebAPI для числовых типов данных? - PullRequest
0 голосов
/ 04 сентября 2018

Может кто-нибудь сказать о передаче ввода для WebApi для числовых типов данных, т.е. int, long и т. Д.

public class Emp
{
    public int Id { get; set; }
    public long Volume { get; set; }
}

Набор ввода 1:

{
    "Id" : "1",
    "Volume" : "200"
}

это работает без ошибки проверки модели.

Набор ввода 2:

{
    "Id" : "1.2",
    "Volume" : "200.5"
}

Проверка модели не удалась, так как не удалось преобразовать значения. Ошибка: {"Error converting value \"200.5\" to type 'System.Int64'. Path 'Volume', line 2, position 14."}

Набор ввода 3:

{
    "Id" : 1.2,
    "Volume" : 200.5
}

Это не дает никакой ошибки проверки модели, но значения, сопоставленные с объектом C #: Id = 1, Volume = 200.

Но и здесь мне нужна ошибка проверки модели, так как я передаю десятичный ввод. Должно быть разрешено только целые числа.

Итак, каков правильный шаблон для отправки ввода API?

Как правильно получить ошибку проверки модели при передаче значений десятичной запятой в тип данных int и long?

Using int & long will make those values rounded to nearest integer value

Как переопределить это, чтобы выдать ошибки проверки модели?

Ответы [ 2 ]

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

Есть способ архивировать то, что вы хотите, но это не простой способ.

@ Saif ответ указывает на правильный путь.

Вы должны изменить свою модель, чтобы избежать нежелательного поведения платформы и получить необработанные значения, например, измените тип на double или string.

Затем вы должны проверить аргументы для себя внутри вашего метода. Если какой-то аргумент неверен, вы должны создать ошибку проверки модели.

В ядре mvc вы можете создать ошибку проверки модели следующим образом (в mvc должно быть что-то похожее):

ModelState.AddModelError(nameof(emp.Volume), $"Error converting value {emp.Volume} to long");
0 голосов
/ 04 сентября 2018

Вы можете использовать атрибут JsonConverter в свойствах, чтобы определить для него пользовательский конвертер json.

public class Emp
{
    [JsonConverter(typeof(MyCustomIntConverter))
    public int Id { get; set; }

    public long Volume { get; set; }
}

public class MyCustomIntConverter : JsonConverter<int>
{
    //implement here
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...