Определите ресурс начальной точки для службы REST

Я создаю службу ASP.Net Web API для игры-лабиринта.

  1. Пользователи должны получить все детали ячеек в лабиринте, чтобы визуализировать лабиринт в плоскости 2D. Я добиваюсь этого, используя метод get public List<Cell> Get()
  2. Пользователь должен получить информацию о ячейке, указав в качестве входных данных CellID. Я добиваюсь этого, используя метод get public CellRepresentation Get(string id), Обратите внимание, что CellRepresentation используется для возврата гипермедиа-ссылок с помощью WebApi.Hal. Эти ссылки представляют целевые ячейки для возможных движений, таких как вверх, вниз, влево и вправо.

Теперь мне нужен способ сообщить, какая ячейка является отправной точкой для пользователей, чтобы начать игру. [В следующем лабиринте ячейка "10" является отправной точкой]. Как отправить сообщение на основе REST?

контроллер

public class CellsController : ApiController
    {
        public CellsController()
        {

        }

        //Get all cells in the maze
        public List<Cell> Get()
        {
            Maze m = new Maze();
            return m.GetCells();
        }

        //Get specific cell
        public CellRepresentation Get(string id)
        {

            Maze m = new Maze();

            Cell c = m.GetCell(id);
            List<Cell> possibleLists = m.GetPossibleRelatedCells(c);
            CellRepresentation beerRep = new CellRepresentation(c, possibleLists);
            return beerRep;
        }
    }

HAL связанные классы

public class CellRepresentation : WebApi.Hal.Representation
        {
            //CellID

            Cell theCell;
            List<Cell> possibleMoveCells;

            public CellRepresentation(Cell c, List<Cell> possibleMoveCells )
            {
                theCell = c;
                this.possibleMoveCells = possibleMoveCells;
            }

            public override string Rel
            {
                get { return LinkTemplates.CellLinks.CellEntry.Rel; }
                set { }
            }

            public override string Href
            {
                get { return LinkTemplates.CellLinks.CellEntry.CreateLink(new { id = theCell.CellID }).Href; }
                set { }
            }

            protected override void CreateHypermedia()
            {
                foreach (Cell relatedCell in possibleMoveCells)
                {
                    if (relatedCell.RelativeName == "Up")
                    {
                        Links.Add(LinkTemplates.CellLinks.UpLink.CreateLink(new { id = relatedCell.CellID }));
                    }
                    if (relatedCell.RelativeName == "Right")
                    {
                        Links.Add(LinkTemplates.CellLinks.RightLink.CreateLink(new { id = relatedCell.CellID }));
                    }
                    if (relatedCell.RelativeName == "Down")
                    {
                        Links.Add(LinkTemplates.CellLinks.DownLink.CreateLink(new { id = relatedCell.CellID }));
                    }
                    if (relatedCell.RelativeName == "Left")
                    {
                        Links.Add(LinkTemplates.CellLinks.LeftLink.CreateLink(new { id = relatedCell.CellID }));
                    }
                }
            }
        }

    public static class LinkTemplates
    {

        public static class CellLinks
        {
            public static Link CellEntry { get { return new Link("self", "~/api/cells/{id}"); } }
            public static Link UpLink { get { return new Link("up", "~/api/cells/{id}"); } }
            public static Link RightLink { get { return new Link("right", "~/api/cells/{id}"); } }
            public static Link DownLink { get { return new Link("down", "~/api/cells/{id}"); } }
            public static Link LeftLink { get { return new Link("left", "~/api/cells/{id}"); } }
        }
    }

Бизнес классы

public class Cell
    {
        public int XVal { get; set; }
        public int YVal { get; set; }
        public bool TopIsWall { get; set; }
        public bool RightIsWall { get; set; }
        public bool BottomIsWall { get; set; }
        public bool LeftIsWall { get; set; }

        public bool IsStartCell { get; set; }
        public bool IsExtCell { get; set; }

        public string RelativeName { get; set; }  //Top, Right, Etc.

        public string CellID
        {
            get
            {
                string characterID = XVal.ToString() + YVal.ToString();
                return characterID; //Example 10
            }

         }  
    }


    public class Maze
    {
        List<Cell> cells;
        public Maze()
        {
            cells = CreateCells();
        }


        public Cell GetFirtCell()
        {
            Cell firstCell = null;

            foreach (Cell c in cells)
            {
                if(c.IsStartCell )
                {
                    firstCell = c;
                    break;
                }
            }
            return firstCell;
        }

        public Cell GetCell(string cellID)
        {
            Cell theCell = null;

            foreach (Cell c in cells)
            {
                if (c.CellID == cellID)
                {
                    theCell = c;
                    break;
                }
            }
            return theCell;
        }

        public List<Cell> GetCells()
        {
            return cells;
        }

        public List<Cell> GetPossibleRelatedCells(Cell inputCell)
        {
            List<Cell> possibleCells = new List<Cell>();

            foreach (Cell c in cells)
            {

                if (c.XVal == inputCell.XVal-1 && c.RightIsWall == false  && c.YVal== inputCell.YVal  )
                {
                    //Go left from the input cell
                    c.RelativeName = "Left";
                    possibleCells.Add(c);

                }
                else if (c.XVal == inputCell.XVal + 1 && c.LeftIsWall == false && c.YVal == inputCell.YVal )
                {
                    //Go right from the input cell
                    c.RelativeName = "Right";
                    possibleCells.Add(c);
                }
                else if (c.YVal == inputCell.YVal - 1 && c.TopIsWall == false && c.XVal == inputCell.XVal )
                {
                    //Go down from the input cell
                    c.RelativeName = "Down";
                    possibleCells.Add(c);
                }
                else if (c.YVal == inputCell.YVal + 1 && c.BottomIsWall == false && c.XVal == inputCell.XVal)
                {
                    //Go up from the input cell
                    c.RelativeName = "Up";
                    possibleCells.Add(c);
                }

            }
            return possibleCells;
        }

        public List<Cell> CreateCells()
        {
            List<Cell> cells = new List<Cell>();
            //cells = 

            Cell cell1 = new Cell
            {
                XVal = 0,YVal = 0,TopIsWall = false,RightIsWall = false,BottomIsWall = true,LeftIsWall = true,
                RelativeName="Self"
            };

            Cell cell2 = new Cell
            {
                XVal = 1,YVal = 0,TopIsWall = true,RightIsWall = false,BottomIsWall = false,LeftIsWall = false,
                IsStartCell = true, //--Start
                RelativeName="Self"
            };

            Cell cell3 = new Cell
            {
                XVal = 2,YVal = 0,TopIsWall = false,RightIsWall = false,BottomIsWall = true,LeftIsWall = false,
                RelativeName="Self"
            };

            Cell cell4 = new Cell
            {
                XVal = 3,YVal = 0,TopIsWall = false,RightIsWall = true,BottomIsWall = true,LeftIsWall = false,
                RelativeName = "Self"
            };


            Cell cell5 = new Cell
            {
                XVal = 0,YVal = 1,TopIsWall = true,RightIsWall = false,BottomIsWall = false,LeftIsWall = true,
                RelativeName = "Self"
            };


            Cell cell6 = new Cell
            {
                XVal = 0,YVal = 0,TopIsWall = true,RightIsWall = false,BottomIsWall = false,LeftIsWall = false,
                RelativeName = "Self"
            };


            Cell cell7 = new Cell
            {
                XVal = 1,YVal = 1,TopIsWall = true,RightIsWall = false,BottomIsWall = true,LeftIsWall = false,
                RelativeName = "Self"
            };


            Cell cell8 = new Cell
            {
                XVal = 2,YVal = 1,TopIsWall = false,RightIsWall = true,BottomIsWall = false,LeftIsWall = false,
                RelativeName = "Self"
            };


            Cell cell9 = new Cell
            {
                XVal = 3,YVal = 1,TopIsWall = false,RightIsWall = true,BottomIsWall = false,LeftIsWall = true,
                RelativeName = "Self"
            };


            Cell cell10 = new Cell
            {
                XVal = 2,YVal = 2,TopIsWall = true,RightIsWall = true,BottomIsWall = false,LeftIsWall = true,
                RelativeName = "Self"
            };

            Cell cell11 = new Cell
            {
                XVal = 3,YVal = 2,TopIsWall = true,RightIsWall = true,BottomIsWall = false,LeftIsWall = true,
                RelativeName = "Self"
            };

            Cell cell12 = new Cell
            {
                XVal = 3,YVal = 3,TopIsWall = true,RightIsWall = true,BottomIsWall = false,LeftIsWall = false,
                IsExtCell = true, //--Exit
                RelativeName = "Self"


            };

            cells.Add(cell1);
            cells.Add(cell2);
            cells.Add(cell3);
            cells.Add(cell4);
            cells.Add(cell5);
            cells.Add(cell6);

            cells.Add(cell7);
            cells.Add(cell8);
            cells.Add(cell9);
            cells.Add(cell10);
            cells.Add(cell11);
            cells.Add(cell12);


            return cells;

        }

    }

Лабиринт

0 ответов

Другие вопросы по тегам