如何在路由配置文件中设置默认页面和 URL

本文关键字:默认 URL 设置 路由 配置文件 | 更新日期: 2023-09-27 18:33:12

这是我第一次在MVC中开发,并且已经遇到这个问题一段时间了。

我想做什么

我想使网址看起来像这样:

example.com/SiteName/Project/Index/3

取而代之的是:

example.com/SiteName/Project?projectId=3

而且,我希望用户能够键入example.com/SiteName并查看example.com/SiteName/Home/Index,因为它是默认页面。

我有什么

我有一个页面,主页,显示项目列表。通过单击其中一个项目,"项目"页面将显示所选项目的详细信息。

在我的RouteConfig.cs文件中,我有这个:

    routes.MapRoute(
        name: "Project",
        url: "{controller}/{action}/{proejctId}",
        defaults: new { controller = "Project", action = "Index", projectId = UrlParameter.Optional }
    );

    routes.MapRoute(
        name: "Default",
        url: "{controller}/{action}/{id}",
        defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
    );

问题

当我在RouteConfig.cs文件中首先列出Projectroutes.MapRoute时,我得到了我想要的 URL ( example.com/SiteName/Project/Index/3 (。

但是,当我尝试example.com/SiteName时,它会在共享文件夹中显示Error.cshtml模板。

我发现了一个SO问题,提到顺序很重要。但是,如果我切换顺序,example.com/SiteName确实成功显示example.com/SiteName/Home/Index页面,但是当我单击列表中的项目时,URL 将更改为以下内容:example.com/SiteName/Project?projectId=3

如何将默认页面设置为主页/索引,同时仍将URL保留为example.com/SiteName/Project/3

如何在路由配置文件中设置默认页面和 URL

将路线更改为

routes.MapRoute(
  name: "Project",
  url: "Project/{action}/{projectId}",
  defaults: new { controller = "Project", action = "Index", projectId = UrlParameter.Optional }
);
routes.MapRoute(
  name: "Default",
  url: "{controller}/{action}/{id}",
  defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
);