Asp.net mvc .net mvc路由URL
我在我的RouteConfig.cs里有这个Asp.net mvc .net mvc路由URL,asp.net-mvc,asp.net-mvc-routing,Asp.net Mvc,Asp.net Mvc Routing,我在我的RouteConfig.cs里有这个 routes.MapRoute( name: "client1", url: "client1/{controller}/{action}", defaults: new { controller = "Home", action = "Index" } ); routes.MapRoute( name: "client2
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>
我的期望是ActionLink呈现如下:
{root}
{root}/Home/About
{root}/Home/Contact
那么,当我从运行时,为什么要为我的链接插入client1
我做错了什么?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 }
);
这确实解决了我上面提到的问题,但当我转到它时,它告诉我无法找到资源。这个应用程序将有多个客户端,我希望它们中的大多数都使用带有客户端名称的URL。有没有办法解决这个问题?
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 }
);