Я не знаю, является ли это наилучшей практикой, но я бы сделал это так:
Добавить новый маршрут: /Author/Maps/{mapID}/Rooms/{action}/{roomID}
Поскольку это маршрут, который я ожидал бы использовать только для RoomsController, у меня не было бы параметра {controller}
на этом маршруте. Просто установите контроллер на «Комнаты» в объекте маршрута по умолчанию.
Тогда все действия в вашем RoomsController будут знать, с какой картой они работают.
Действие Index по умолчанию для RoomsController может быть списком всех комнат для указанной карты.
Действие Create будет выглядеть как Create(int mapID)
, а действие Details будет выглядеть как Details(int mapID, int roomID)
Редактировать: в отношении недействительных URL-адресов с несовпадающим mapID и roomID, вы можете просто проигнорировать mapID, но я думаю, что лучше будет проверить правильность указанного mapID и показать сообщение об ошибке, если это не так.
Редактировать 2: (дополнительные мысли относительно связи между mapID и roomID)
Вы можете просто сделать roomID уникальным на данной карте. Следовательно, карта 5, комната 3 будет отличаться от карты 8, комната 3.