如何动态重写url然后在MVC中重新路由?

时间:2014-01-29 21:02:09

标签: c# asp.net asp.net-mvc asp.net-mvc-4

我正在尝试将多租户改造为大型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);
    }
}

0 个答案:

没有答案