我有以下网址结构,只是想弄清楚要配置的最佳路由。
编辑:添加了更多网址
/ cars / {name}(显示有关汽车的一般信息)
/ cars / {name} / models(显示特定汽车的模型列表)
/ cars / {name} / models / {id}(显示特定车型的特定型号)
/ cars / {name} / models / edit(添加一个新动作模型)
/ cars / {name} / models / {id} / owner(特定型号的所有者列表)
/ cars / {name} / models / {id} / owners / create(添加新所有者)
到目前为止,我有
routes.MapRoute(
name: "CarReleases",
url: "cars/{name}/models/{id}",
defaults:
new
{
controller = "Releases",
action = "Index",
id = UrlParameter.Optional
}
);
如果我使用/ cars / {name} / models,这是有效的,但显然,我没有为模型页面提供的操作。我是否必须为这种情况创建新的路线图?
我还有CarController,其映射如下:
routes.MapRoute(
name: "Cars",
url: "cars/{name}/{action}",
defaults: new { controller = "Cars", action = "Details", id = UrlParameter.Optional }
);
如您所见,我有一般动作和动态请求的混合。有点混淆将其放入maproutes的最佳方式。
答案 0 :(得分:0)
订购路线从最具体到最不具体的。在我的示例中,所有操作都映射到控制器Cars
;但是,你可以将它们分开。例如:
所有者:
routes.MapRoute(
name: "owners",
url: "cars/{name}/models/{id}/owners/{action}/{ownerId} ",
defaults: new { controller = "Cars", action = "OwnerIndex", id = UrlParameter.Optional, ownerId = UrlParameter.Optional }
);
型号:
routes.MapRoute(
name: "models",
url: "cars/{name}/models/{action}/{id}",
defaults: new { controller = "Cars", action = "ModelIndex", id = UrlParameter.Optional }
);
汽车:
routes.MapRoute(
name: "Cars",
url: "/cars/{name}/{action}/{id}",
defaults: new { controller = "Cars", action = "Index", id = UrlParameter.Optional }
);
请注意,默认操作已更改为“索引”,因此当您省略操作和ID时,它会列出所有操作(如果您决定将它们全部保存在一个控制器中,则可能需要更改它)
关于你是否应该将它们保存在一个控制器中的问题,我认为这很好,除非你想将管理功能(编辑,删除等)与查看区分开来。在任何情况下,您仍然可以将它们放在一个控制器中,只需添加Authorize
属性即可。
[Authorize(Roles = "admin")]
public ViewResult Delete(int id){}