我正在开发一个简单的MVC2多租户应用程序。我的问题是如何确定用户在网址中要求哪个租户门户网站? 我需要做的是:
以下两条路线实现了这一目标,似乎工作正常。
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”条目。
确定哪个门户网站已被请求的最佳方法是什么,以便确保它存在并显示客户端特定的主页?我需要自定义路由处理程序吗?
提前谢谢。
瑞克
答案 0 :(得分:1)
这应该有效:
private void Application_BeginRequest(Object source, EventArgs e)
{
var route = RouteTable.Routes.GetRouteData(new HttpContextWrapper(Context));
object currentPortal;
if(route.Values.TryGetValue("clientportal", out currentPortal))
{
Context.Items.Add("ClientPortalName", currentPortal);
}
}
答案 1 :(得分:1)
你们对路线处理程序的看法是什么?这种方法与Application_BeginRequest的优缺点是什么?
public class PortalRouteHandler : IRouteHandler
{
public IHttpHandler GetHttpHandler(RequestContext requestContext)
{
var portalName = requestContext.RouteData.GetRequiredString("clientportal");
if (!string.IsNullOrWhiteSpace(portalName))
{
// Grab the portal details from the database
var portalEntity =
Repository.For<ClientPortalEntity>().GetAll().Where(x => x.PortalTag == portalName).First();
if (portalEntity != null)
{
// Register db object for use by controllers
IoC.Container.RegisterInstance<ClientPortalEntity>(portalEntity);
}
}
// Return the default MVC HTTP handler for the configured request
return new MvcHandler(requestContext);
}
}