我们正在使用由多个客户共享的asp.net mvc应用程序。我们需要url包含客户端url友好名称。例如:
domain.com/clientName/controller/action/id
以下内容似乎在路由时起作用,但是对于操作链接助手没有正确生成“clientName”。
_routes.MapRoute("DefaultRoute",
"{clientName}/{controller}/{action}/{id}",
new { controller = "Home", action = "Index", id = string.Empty },
new { clientName = @"[\w-]+" });
我们希望继续使用Html.ActionLink Helper方法,但它不会在生成的链接中包含clientName。我们是否必须在这种情况下编写自己的帮助者,还是有另一种方法?
是否有其他人使用此类路由方案构建了应用程序?任何建议将不胜感激!
答案 0 :(得分:11)
根据我的经验,Darin引用的ActionLink方法将生成如下的URL:
http://host/Home/action?clientName=someClient
如果要完全按照指定生成URL。查看RouteLink方法,该方法可让您指定要匹配的路线的名称:
<%= Html.RouteLink("some text", "DefaultRoute", new { clientName = "someclient" })%>
答案 1 :(得分:7)
您需要指定路线值:
<%= Html.ActionLink("some text", "action", new { clientName = "someclient" })%>
将生成:
http://host/someclient/Home/action
您还可以在声明路线时指定默认值:
_routes.MapRoute("DefaultRoute",
"{clientName}/{controller}/{action}/{id}",
new {
controller = "Home",
action = "Index",
id = string.Empty,
clientName = "defaultClient" },
new { clientName = @"[\w-]+" });
答案 2 :(得分:0)
您尝试做的事情应该无需使用RouteLink或指定匿名对象即可。确保您的路线注册正确无误。例如,如果你有类似的东西:
routes.MapRoute("Base",
string.Empty,
new { controller = "Home",
action = "Index",
id = string.Empty });
在 DefaultRoute 之前,它可能导致对ActionLink的调用返回奇怪的结果。我以前被这个烧过。