Рассмотрим следующие модели:
public class Shape {
public Guid Id {get;set;}
public string Color {get;set;}
}
public class Circle : Shape {
public int Contour {get;set;}
}
public class Rectangle : Shape {
public bool IsSquare {get;set;}
}
Это просто демонстрация, у меня есть базовый класс с производными классами с различными свойствами.
В моем клиенте Javascript у меня есть List
с различными формами.
const shapes = [
{ id: ..., color: 'red', contour: 23 },
{ id: ..., color: 'blue', isSquare: false }
];
Когда я отправляю эти данные на сервер, мне нужно знать, является ли это Circle
илиRectangle
.В моем веб-API определена следующая конечная точка.
[HttpPost("shapes")]
public IActionResult Post([FromBody] IEnumerable<Shape> shapes)
{
foreach(var shape in shapes)
{
// how do I know if shape is of type Square/Circle?
// and how do I cast the shape to the corresponding type?
if (shape is Circle)
{
shapeService.InsertCircle(shape as Circle);
}
else if (shape is Rectangle)
{
shapeService.InsertRectangle(shape as Rectangle);
}
}
return Ok();
}
Итак, вопрос в том, возможно ли привести формы к соответствующим им типам, когда я нахожусь в функции контроллера?