Как использовать POST-запрос для создания объекта в C # API?

#c# #asp.net #json #api #object

#c# #asp.net #json #API #объект

Вопрос:

Итак, я пытаюсь создать эту систему штрафов за парковку, и в настоящее время я создаю эти объекты вручную в коде для тестирования. Теперь я подошел к шагу, на котором мой POST-запрос в postman должен иметь возможность создавать объект в памяти приложения. У меня есть два класса, один для «Автомобиля» и один для «Билета».

 public class Car
    {

        public string regNr { get; set; }


        public string carBrand { get; set; }


        public string carColor { get; set; }

        public List<Ticket> ticketlist {get; set;}
        
        public Car()
        {
            this.ticketlist = new List<Ticket>();
            
        }
        public void addNewTicket(Ticket newTicket)
        {
            
            ticketlist.Add(newTicket);
        }
    }
}
 

 public class Ticket
    {
       

      
        public int ticketID { get; set; } = 0;

        
        public DateTime date { get; set; }

       
        public string comment { get; set; }


       
        public int parkingAreaID { get; set; }

       
        public int parkingsOfficerID { get; set; }

    }
}
 

 List<Bil> list = new List<Car>();
public void Post([FromBody]Bil val)
        {
 
            list.Add(val);
        }
 

Запросы GET работают, и я хочу иметь возможность добавлять новый билет к регистрационному номеру с помощью моего post-запроса.
Мой текущий результат таков;

 {
    "regNr": "BT66358",
    "carBrand": "BMW",
    "carColor": "Yellow",
    "ticketlist": [
        {
            "ticketID": 1,
            "date": "2020-12-12T17:49:34.4000401 01:00",
            "comment": "very bad parking",
            "parkingsAreaID": 1,
            "parkingsOfficerID": 2
        },
        {
            "ticketID": 2,
            "date": "2020-12-12T17:49:34.4000401 01:00",
            "comment": "very bad parking",
            "parkingsAreaID": 2,
            "parkingsOfficerID": 2
        }
    ]
}
---------------UPDATE-----------

Bil = Car
botliste = ticketlist
liste = list
[![enter image description here][1]][1]


  [1]: https://i.stack.imgur.com/q3UaO.png
 

Комментарии:

1. В чем ваш вопрос?

2. Я хочу передать объект с помощью POST-запроса

3. что такое Bil? Какова его структура?

4. @AleksandrKurilov О, мой плохой, это тип из моего языка, это класс «Car»

5. Вы просто хотите добавить «val» в «список»?

Ответ №1:

Если я вас правильно понял, то, скорее всего, вам просто нужно добавить некоторые атрибуты, и вы получите что-то вроде этого:

 List<Car> list = new List<Car>();

[HttpPost]
[HttpPost("SomeRoute")]
public IActionResult Post([FromBody] Car val)
{

    if (val == null)
    {
        return BadRequest("Car data must be filled");
    }

    if (string.IsNullOrEmpty(val.regNr))
    {
        return BadRequest("Reg number must be filled");
    }

    var car = list.FirstOrDefault(c => string.Equals(c.regNr, val.regNr));

    if (car != null)
    {
        car.ticketlist.AddRange(val.ticketlist);
    }
    else
    {
        list.Add(val);
    }

    /// And return IActionResult
    return Ok();
}
 

P.S. Дайте описание типа Bil, чтобы получить более подробный ответ.

upd:

Вы также можете добавить атрибуты к полям ваших классов, которые будут проверять значения, например:

 public class Car
{
    [MinLength(6, ErrorMessage = "regNr field must be at least 6 characters")]
    public string regNr { get; set; }
 

Атрибут «minLength» указывает, что значение для этого свойства является обязательным и должно быть не менее 6 символов.

Более подробная информация здесь: https://docs.microsoft.com/en-us/dotnet/api/system.componentmodel.dataannotations?view=net-5.0

upd2:

Вот как я могу вызвать этот метод:

введите описание изображения здесь

введите описание изображения здесь

Комментарии:

1. В настоящее время появляется эта ошибка «не удается преобразовать из «Webapplication.model.car» в «Webapplication.model.ticket» с вашим кодом