有没有办法实现自定义路由,以便自动传递某些路由值?

时间:2011-12-06 17:54:30

标签: .net asp.net-mvc multi-tenant

我有一个多租户的应用程序,也就是说,我有多个客户端使用该应用程序并使用文件夹共享一个域。如下所示:

  1. www.mydomain.com / client1 /家/索引
  2. www.mydomain.com / client2 /家/索引
  3. 我无法使用区域,因为客户端不是静态的,它们会注册,并且必须能够立即开始使用该应用程序。我不能使用子域名,因为在这种情况下我没有动态控制DNS。

    话虽如此,我如何实现自定义路由,以便每次构建传出URL时都不需要传递客户端名称?

    也就是说,我希望这是真的:

    @Url.Action("Index", "Home") -> www.mydomain.com/client1/home/index
    

    没有传递client1,有些东西可以解析client1,因为在我构建此URL时,此字符串将是当前路由值的值,因为我已经在{{1 }}

    我该怎么做?

1 个答案:

答案 0 :(得分:5)

routes.MapRoute(
    "Default",
    "{client}/{controller}/{action}/{id}",
    new { controller = "Home", action = "Index", id = UrlParameter.Optional }
);

现在,当您使用时,导航到/client1/Home/Index并在Index.cshtml视图内导航时:

@Html.ActionLink("foo", "About")

这会产生:

<a href="/client1/home/About">foo</a>

Url.Action操作中使用Index帮助程序也是如此。它将保留原始请求中的client路由值。