Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-mvc/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Asp.net mvc MVC自定义路由和操作链接_Asp.net Mvc_Asp.net Mvc Routing - Fatal编程技术网

Asp.net mvc MVC自定义路由和操作链接

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}",

我们正在使用由多个客户端共享的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帮助器方法,但它在生成的链接中不包括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 });