我正在研究简单的MVC2多租户应用程序。我的问题是,如何确定用户在url中要求哪个租户门户? 我需要有发生的情况是这样的:确定在多租户MVC网站中路由到哪个门户
- 到http://localhost的请求应到标准的主控制器的索引页
- 到http://localhost/client1的请求应该去ClientPortalHome控制器的索引页
- 到的请求http://localhost/client1/LogOn会去客户特定登录页
以下两种途径实现这一目标,似乎很好地工作。
routes.MapRoute(
"Client Portal Default", // Route name
"{clientportal}/{controller}/{action}/{id}", // URL with parameters
new { controller = "ClientPortalHome", action = "Index", id = UrlParameter.Optional } // Parameter defaults
);
routes.MapRoute(
"Default", // Route name
"{controller}/{action}/{id}", // URL with parameters
new { controller = "Home", action = "Index", id = UrlParameter.Optional } // Parameter defaults,
);
我的问题是我如何确定哪个客户端门户已被要求(client1在上面的例子中)?
我尝试使用这样的:
private void Application_BeginRequest(Object source, EventArgs e)
{
var route = RouteTable.Routes.GetRouteData(new HttpContextWrapper(Context));
var currentPortal = route.GetRequiredString("clientportal");
Context.Items.Add("ClientPortalName", currentPortal);
}
的问题是,它要求所有路线和抛出异常中家庭控制器的情况下,因为路线不包含“clientportal”条目。
什么是最好的方式来确定哪个门户已被请求,所以我可以确保它存在并显示客户端特定的主页?我需要一个自定义路由处理程序吗?
预先感谢您。
里克
为什么你需要知道HomeController上的clientportal?有一些客户特定的内容吗?我问这,因为你有一个客户端特定的HomeController(ClientPortalHome) – davehauser 2010-08-19 17:52:42
我不需要它的HomeController,但我确实需要它为ClientPortalHomeController和一堆其他控制器。我计划为所有客户端门户主页提供一个控制器。是的,我需要从数据库中提取一些客户特定的内容并显示(css,text和jpg)。我编辑了这篇文章,以便更清楚地了解错误。 – rboarman 2010-08-19 18:35:32