public IActionResult CanMoveTo([FromQuery] string figureName, [FromQuery] byte fromX, [FromQuery] byte toX, [FromQuery] byte fromY, [FromQuery] byte toY) { List <Type> chessFigureTypes = Assembly.GetExecutingAssembly().GetTypes().Where(x => x.BaseType == typeof(ChessFigure)) .ToList(); Type requestedType = chessFigureTypes.Single(t => t.Name.Equals(figureName, StringComparison.OrdinalIgnoreCase)); ChessFigure chessFigure = (ChessFigure)Activator.CreateInstance(requestedType, new object[] { fromX, fromY }, null); bool canMoveTo = chessFigure.CanMoveTo(toX, toY); return(Ok(canMoveTo)); }