.net mvc routing URL



我的RouteConfig.cs 中有这个

routes.MapRoute(
            name: "client1",
            url: "client1/{controller}/{action}",
            defaults: new { controller = "Home", action = "Index" }
        );
        routes.MapRoute(
            name: "client2",
            url: "client2/{controller}/{action}",/* updated parent folder to match route name */
            defaults: new { controller = "Home", action = "Index" }
        );
        routes.MapRoute(
            name: "Default",
            url: "{controller}/{action}/{id}",
            defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
        );

这是我的看法。

            <div class="navbar-collapse collapse">
            <ul class="nav navbar-nav">
                <li>@Html.ActionLink("Home", "Index", "Home")</li>
                <li>@Html.ActionLink("About", "About", "Home")</li>
                <li>@Html.ActionLink("Contact", "Contact", "Home")</li>
            </ul>

当我运行应用程序时,它运行在http://localhost:50415/

然而ActionLinks呈现为:

{root}/client1 
{root}/client1/Home/About 
{root}/client1/Home/Contact 

我的期望是actionlink呈现为这样:

{root}
{root}/Home/About
{root}/Home/Contact

那么,当我从http://localhost:50415/??

我做错了什么?

MVC中的路由规则按顺序处理。第一条规则是先匹配的规则。要解决此问题,只需重新排列代码中的规则即可。此外,您还可以通过使用约束条件将"客户端"规则分解为一个规则:

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

最新更新