#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» с вашим кодом