Model view controller 面向分层系统的MVC-URL方案设计

Model view controller 面向分层系统的MVC-URL方案设计,model-view-controller,theory,asp.net-mvc-routing,hierarchical-data,Model View Controller,Theory,Asp.net Mvc Routing,Hierarchical Data,假设我正在使用MVC web应用程序构建一个多用户地下城系统。为了描述玩家可以探索的区域,系统可以包含一些地图,这些地图将由房间和门组成,门连接两个房间。 考虑系统的创作部分。创建地图很容易-我需要如下URL: /Author/Maps (an index of my maps) /Author/Maps/Create (a new Map) /Author/Maps/Detail/3 (show Map details) /Author/Maps/

假设我正在使用MVC web应用程序构建一个多用户地下城系统。为了描述玩家可以探索的区域,系统可以包含一些地图,这些地图将由房间和门组成,门连接两个房间。 考虑系统的创作部分。创建地图很容易-我需要如下URL:

/Author/Maps (an index of my maps) /Author/Maps/Create (a new Map) /Author/Maps/Detail/3 (show Map details) /Author/Maps/Edit/3 (edit map details) /作者/地图(我的地图索引) /作者/地图/创建(新地图) /作者/地图/细节/3(显示地图细节) /作者/地图/编辑/3(编辑地图详细信息) 使用路由方案:/Author/{controller}/{action}/{ID}

这是我需要帮助的房间的URL。创建新房间时,我需要知道要为哪个地图创建它

/Author/Rooms/CreateIn/[mapID] ? /作者/Rooms/CreateIn/[mapID]? 然后编辑房间的详细信息:

/Author/Rooms/Edit/[roomID] /Author/Rooms/Detail/[roomID] /作者/房间/编辑/[房间ID] /作者/房间/细节/[房间ID] 这个路由方案有效吗?并且,为地图列出所有房间的视图应该是房间控制器上的“索引”操作(传入MapID)还是地图控制器上的“房间”操作


谢谢。

我不知道这是否是最佳做法,但我会这样做:

添加新路由:
/Author/Maps/{mapID}/Rooms/{action}/{roomID}

因为这是一个我只希望用于RoomsController的路由,所以在该路由中没有
{controller}
参数。只需在管线的默认对象中将控制器设置为“房间”

然后你房间里的所有动作控制器就会知道他们在用哪个地图

RoomsController的默认索引操作可以是指定映射的所有房间的列表

创建操作看起来像
Create(int-mapID)
而详细信息操作看起来像
Details(int-mapID,int-roomID)

编辑:对于mapID和roomID不匹配的无效URL,您可以忽略mapID,但我认为更好的方法是验证指定的mapID是否正确,如果不正确,则显示错误消息

编辑2:(关于mapID和roomID之间关系的其他想法)
您可以在给定的地图中使roomID唯一。因此,地图5第3房间将与地图8第3房间不同。

是的,这会起作用。这也是有意义的,因为数据的层次结构与URL层次结构相匹配。存在无效URL的可能性是否重要?因为您可能有一个不属于指定mapID的roomID?我想无论URL中有什么内容,都必须获得提供房间ID的正确地图。