MapRoute从url中移除单个动作

本文关键字:单个动 url MapRoute | 更新日期: 2023-09-27 18:16:44

所以我读了一堆答案,但我似乎不能理解我做错了什么。这是我使用的路径

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

这是可行的,但它会使book控制器中的所有其他操作重定向到索引操作。我不想那样,我只想让我的url看起来像http://www.example.com/project/1/awesome-book,这是有效的,但我使用的所有其他操作,从那个页面通过Ajax,被指向索引操作,而不是他们的正确操作。

帮助吗?

MapRoute从url中移除单个动作

可以为id参数添加整数约束。

 routes.MapRoute("project",
       "project/{id}/{slug}",
       new { controller = "project", action = "index", id = UrlParameter.Optional, slug = "" },
       new { id = @"'d+"});

该路由对id参数有约束。它是一个简单的正则表达式,用于检查id参数是否为整数。由于该路由位于默认路由之上,因此将首先对其进行检查。http://www.example.com/project/1/awesome-book将被映射到索引操作。但是当您尝试访问其他操作时,您的第二段将包含一个操作名称。由于操作名不是整数,请求将由默认路由解析。