Asp.net mvc MVC自定义路由和操作链接
我们正在使用由多个客户端共享的asp.net mvc应用程序。我们需要url包含客户端url友好名称。例如: domain.com/clientName/controller/action/id 当涉及到路由时,下面的方法似乎有效,但是没有为操作链接帮助程序正确生成“clientName”Asp.net mvc MVC自定义路由和操作链接,asp.net-mvc,asp.net-mvc-routing,Asp.net Mvc,Asp.net Mvc Routing,我们正在使用由多个客户端共享的asp.net mvc应用程序。我们需要url包含客户端url友好名称。例如: domain.com/clientName/controller/action/id 当涉及到路由时,下面的方法似乎有效,但是没有为操作链接帮助程序正确生成“clientName” _routes.MapRoute("DefaultRoute", "{clientName}/{controller}/{action}/{id}",
_routes.MapRoute("DefaultRoute",
"{clientName}/{controller}/{action}/{id}",
new { controller = "Home", action = "Index", id = string.Empty },
new { clientName = @"[\w-]+" });
我们希望继续使用Html.ActionLink帮助器方法,但它在生成的链接中不包括clientName。在这种情况下,我们是否必须编写自己的助手,或者是否有其他方法
是否有其他人使用这种类型的路由方案构建了应用程序?如有任何建议,将不胜感激 您需要指定管线值:
<%= Html.ActionLink("some text", "action", new { clientName = "someclient" })%>
您还可以在声明路由时指定默认值:
_routes.MapRoute("DefaultRoute",
"{clientName}/{controller}/{action}/{id}",
new {
controller = "Home",
action = "Index",
id = string.Empty,
clientName = "defaultClient" },
new { clientName = @"[\w-]+" });
根据我的经验,Darin引用的ActionLink方法将生成如下URL:
http://host/Home/action?clientName=someClient
如果要完全按照指定的方式生成URL。检查用于指定要匹配的路由名称的方法:
<%= Html.RouteLink("some text", "DefaultRoute", new { clientName = "someclient" })%>
您尝试执行的操作应该可以正常工作,而不必使用RouteLink或指定匿名对象。确保您的路线登记正确无误。例如,如果您有以下内容:
routes.MapRoute("Base",
string.Empty,
new { controller = "Home",
action = "Index",
id = string.Empty });
在您的DefaultRoute之前,它可能会导致调用ActionLink返回奇怪的结果。我以前被这个问题困扰过。@Bryan,我已经测试了我提供的代码,它生成了预期的url。也许在您的例子中,您将routes声明放在了错误的顺序中,执行的是catch-all路由。具体的路由应该放在综合路由之前。答案很好,我在试验MVCContrib便携区域路由时遇到了同样的问题。不是它像一个符咒一样工作。RouteLink也为我工作,而ActionLink并没有为我检查和重复检查的路线工作。令人沮丧的是,我不知道我是否无法理解路由配置,或者ActionLink正在做一些奇怪的事情。这很有魅力。正如你在另一篇评论中所说的,你必须把“一网打尽”的路线放在最后,否则你可能会得到意想不到的结果
routes.MapRoute("Base",
string.Empty,
new { controller = "Home",
action = "Index",
id = string.Empty });