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

And*_*ena 1 .net asp.net-mvc multi-tenant

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

  1. www.mydomain.com/ client1/ home/index
  2. www.mydomain.com/ client2/ home/index

我不能使用区域,因为客户端不是静态的,他们注册,他们必须能够立即开始使用该应用程序.我不能使用子域名,因为在这种情况下我没有动态控制DNS.

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

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

@Url.Action("Index", "Home") -> www.mydomain.com/client1/home/index
Run Code Online (Sandbox Code Playgroud)

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

我怎样才能做到这一点?

Dar*_*rov 5

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

现在,当您使用时导航到视图/client1/Home/Index 内部以及是否在Index.cshtml视图内部:

@Html.ActionLink("foo", "About")
Run Code Online (Sandbox Code Playgroud)

这会产生:

<a href="/client1/home/About">foo</a>
Run Code Online (Sandbox Code Playgroud)

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