Подтвердить ввод в запрос POST? - PullRequest
2 голосов
/ 07 марта 2020

Я создал контроллер для конечной точки API REST POST, следующий:

public IActionResult POST([FromBody]Person person) 
{ 
    ....
} 

и где Person определен как

public class Person 
{
   public string Name {get; set;}
   public int Age {get; set;}
}

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

{
  "Name": "Peter", 
  "Age": 2
}

без каких-либо проблем ...

Проблемы возникают, когда я передаю что-то вроде

{
  "Name": "Peter", 
  "Age": 2, 
  "Error": 123123123
}

Это все еще создает Person, который заполнить первые два ..

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

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

Но так как последний вход содержит недопустимое поле, но фактический экземпляр созданного ввода полностью аналогичен первому - я получаю сообщение об ошибке, что они не равны?

Я предполагаю, что error оператор в JSON как-то хранится в новом экземпляре? но как мне убедиться, что вход проверяется до того, как контроллер создал экземпляр с учетом JSON ввода?

1 Ответ

0 голосов
/ 07 марта 2020

1) для проверки вашей модели Person у вас может быть что-то вроде

using System.ComponentModel.DataAnnotations;
public class Person
{
    [Required]
    [StringLength(250, MinimumLength = 2)]
    public string Name { get; set; }

    [Required]
    [Range(1, 121)]
    public int Age { get; set; }
}

и внутри действия POST контроллера вы можете использовать if(!ModelState.IsValid){.....}

2) для сравнения двух экземпляров Person Вы можете переопределить Equals ():

public class Person
{
    ...
    ...
    public override bool Equals(object obj) =>
        (obj is Person otherPerson) ? (Name,Age) == (otherPerson.Name,otherPerson.Age): false;
}

здесь имя и возраст текущего экземпляра сравниваются с именем и возрастом другого экземпляра. Это позволит использовать if ( person.Equals ( someOtherPErsonInstance ) ){....}

3), если вам нужно убедиться, что дополнительные поля не присутствуют в запросе POST, вы можете добавить пользовательскую реализацию IModelBinder или принять необработанные данные в POST действие, тогда разбери и проверь.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...