【发布时间】:2010-08-19 17:48:36
【问题描述】:
我正在开发一个简单的 MVC2 多租户应用程序。我的问题是如何确定用户在 url 中询问了哪个租户门户? 我需要发生的是:
- 对http://localhost 的请求应转到标准 Home 控制器的索引页面
- 对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);
}
问题是它被所有路由调用,并为 Home 控制器情况抛出异常,因为该路由不包含“clientportal”条目。
确定请求的门户网站的最佳方法是什么,以便我可以确保它存在并显示客户特定的主页?我需要自定义路由处理程序吗?
提前谢谢你。
瑞克
【问题讨论】:
-
为什么需要知道 HomeController 上的客户端门户?是否有一些客户特定的内容?我问这个,因为你有一个特定于客户端的 HomeController (ClientPortalHome)
-
HomeController 不需要它,但 ClientPortalHomeController 和许多其他控制器确实需要它。我计划为所有客户端门户主页设置一个控制器。是的,我需要从数据库中提取并显示一些特定于客户端的内容(css、文本和 jpg)。我编辑了帖子以更清楚地了解错误。