【问题标题】:How can I map URLs for a multi-tenanted MVC site?如何映射多租户 MVC 站点的 URL?
【发布时间】:2013-12-23 06:35:20
【问题描述】:

我有一个多租户 MVC 站点,其中所有 MapRoutes 开始如下:

http://foo.com/{organisation}/{branch}/{controller}/{action}

每个组织可以有多个分支机构。例如:

Metro 组织有两个分支:

http://foo.com/metro/north/
http://foo.com/metro/south/

Gold 组织有三个分支:

http://foo.com/gold/usa/
http://foo.com/gold/eu/
http://foo.com/gold/asia/

在这些下面还有更多的控制器和操作,但每个 MapRoute / url 都遵循这种格式。

我的组织不喜欢通用 URL,希望对其进行个性化设置。有没有可能改变这个:

http://foo.com/metro/north/
http://foo.com/metro/south/

对此(暗示 {branch} = 'metro')

http://www.metrowebsite.com/north/
http://www.metrowebsite.com/south/

在不更改 MVC 网站的情况下使用某种 URL 映射或 URL 重定向?

我什至不确定要使用正确的术语来搜索这方面的帮助。

感谢期待!

【问题讨论】:

    标签: asp.net-mvc asp.net-mvc-4 url url-redirection


    【解决方案1】:

    我想您可以将这些 URL 的所有 DNS 条目映射为指向同一个 Web 服务器实例,然后使用 URL 重写配置将其转换为您的应用程序期望的“标准”路径。

    我自己使用过 URL 重写 (http://www.iis.net/downloads/microsoft/url-rewrite) 来做类似的事情,所以我知道它在概念上是有效的。我只是不能 100% 说它接收到完整的 url(即http://www.metrowebsite.com/north/)而不仅仅是路径(即 /north)。您可能需要验证这部分。

    本质上,该模块将采用传入的 URls,即http://www.metrowebsite.com/north/ 并且可以使用正则表达式将其调整为http://www.metrowebsite.com/north/的格式

    这是我做的一个例子:

    <rewrite>
      <rules>
        <rule name="MyRewriteRul" stopProcessing="true">
          <match url="Some/Sort/Of/Friendly/Url/$" />
          <action type="Rewrite" url="MyControllerName/MyActionName" appendQueryString="true" />
        </rule>
    </rewrite>
    

    此配置直接进入您的 Web.config 文件 - 有关详细信息,请参阅文档。

    重写与“Some/Sort/Of/Friendly/Url/”匹配的传入 URL 并将其重写为我的系统期望的格式的非常基本的示例,即“MyControllerName/MyActionName”。

    我认为这是你可以建立的东西。

    关于你的路由,我建议稍微修改它们,在 url 中引入一些“静态”组件,这样你就不会遇到不必要的路径匹配冲突。我也做了一个类似的多租户路径练习。

    考虑执行以下操作:

    http://foo.com/o/{organisation}/b/{branch}/{controller}/{action}
    

    然后你可以有这样的匹配规则:

    routes.MapRoute(
                "Organisation.Default",
                "o/{organisation}/b/{branch}/{controller}/{action}/{id}",
                new { siteView = "Public", controller = "Home", action = "Index", id = "0" });
    

    这不会与您的默认路由冲突,因为 /o 和 /b 部分清楚地表明了它的组织路由。您显然可以根据需要修改它,只是需要考虑的事情。 :)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-11-13
      • 1970-01-01
      • 1970-01-01
      • 2017-04-19
      • 1970-01-01
      • 1970-01-01
      • 2011-12-15
      • 1970-01-01
      相关资源
      最近更新 更多