我正在尝试将多租户改造为大型ASP.NET MVC应用程序。我希望所有以/client/{client}/{*path}
开头的路由真正路由到{*more}
,但是在幕后设置了一些每个客户端(以便指向特定的数据库和类似的东西)。
我做了一个IRouteHandler
,看起来它实际上可行。但是这里有很多MVC黑盒子,我真的不明白,所以我想知道是否有任何MVC专家可以告诉我这种方法是否存在任何问题,或者更好的方法是什么?
public class ClientRoute : IRouteHandler
{
...
public IHttpHandler GetHttpHandler(RequestContext requestContext)
{
this.m_Path = (string)requestContext.RouteData.Values["path"];
this.m_Client = (string)requestContext.RouteData.Values["client"];
string virtualPath = "~/" + this.m_Path;
requestContext.HttpContext.RewritePath(virtualPath);
var route = RouteTable.Routes.GetRouteData(requestContext.HttpContext);
requestContext.RouteData.Values.Clear();
requestContext.RouteData.Values.AddRange(route.Values);
requestContext.RouteData.Route = route.Route;
requestContext.RouteData.RouteHandler = route.RouteHandler;
requestContext.RouteData.DataTokens.Clear();
requestContext.RouteData.DataTokens.AddRange(route.DataTokens);
return new MvcHandler(requestContext);
}
}