0

我有以下 url 结构,只是想找出要配置的最佳路由。

编辑:添加了更多网址

/cars/{name}(显示汽车的一般信息)

/cars/{name}/models(显示特定汽车的模型列表)

/cars/{name}/models/{id}(显示特定汽车的特定型号)

/cars/{name}/models/edit(添加一个新模型,这将是一个动作)

/cars/{name}/models/{id}/owners(特定模型的所有者列表)

/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 的最佳方法。

4

1 回答 1

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){}
于 2013-01-16T22:33:42.340 回答