我有一个多租户的MVC网站,其中所有MapRoutes的开头如下:
http://foo.com/{organisation}/{branch}/{controller}/{action}
每个组织都可以有多个分支机构。例如:
Metro组织有两个分支机构:
http://foo.com/metro/north/
http://foo.com/metro/south/
黄金组织有三个分支机构:
http://foo.com/gold/usa/
http://foo.com/gold/eu/
http://foo.com/gold/asia/
下面还有其他控制器和动作,但每个MapRoute / url都遵循这种格式。
我的组织不喜欢通用网址,并希望对其进行个性化设置。是否有可能改变:
http://foo.com/metro/north/
http://foo.com/metro/south/
对此(暗示{branch} ='metro')
http://www.metrowebsite.com/north/
http://www.metrowebsite.com/south/
使用某种URL映射或URL重定向而不更改MVC网站?
我甚至不确定用于搜索此帮助的正确术语。
感谢您的期待!
答案 0 :(得分:0)
我猜你可以将这些网址的所有DNS条目映射到同一个网络服务器实例,然后使用网址重写配置将其转换为应用程序所需的“标准”路径。
我自己使用URL重写(http://www.iis.net/downloads/microsoft/url-rewrite)来做类似的事情,所以我知道它在概念上有效。我不能100%说它收到了完整的网址(即http://www.metrowebsite.com/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'。
我认为这是你可以建立的。
关于你的路线,我建议稍微修改它们,在网址上引入一些“静态”组件,这样你就不会得到不必要的路径匹配冲突。我也做了类似的多租户路径练习。
考虑执行以下操作:
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部分明确表示其组织路由。您可以根据需要明显地修改它,只需要考虑一些事情。 :)