跨多个子域的URL路由

Jes*_*lam 0 c# asp.net asp.net-mvc url-routing

我发现自己处境艰难.我们正在开发一个ASP.NET MVC 2应用程序,它由多个部分组成.将这些部分跨越多个子域是一个设计目标.每个子域都有自己的控制器.

挑战在于我们的托管服务提供商的控制面板允许两种形式的子域重定向,而且它们都不适合这个账单.选择是:

  • 重定向到URL.选择是否重定向到相对于请求URL的确切目的地或目的地.

  • 重定向到我的托管空间中的特定文件夹.

我将尝试说明预期的行为.假设默认路由是{controller}/{action}/{id},我希望URL http://subdomain.welcome.com/a/b由MVC应用程序处理http://welcome.com/subdomain/a/b.

URL重定向可以解决此问题,除了用户在浏览器中看到URL更改的事实.我们不希望客户端看到重定向发生.

重定向到我们的MVC应用程序根文件夹根本不起作用.该应用程序不会接收请求,IIS会传回4xx错误.

编辑:

为了找到答案,我会简化一下."重定向到URL"没有做我想要的,所以留下重定向到一个文件夹.

如果我将子域重定向到我的MVC应用程序的根文件夹并且IIS不会接收请求,这是IIS还是我的提供商的限制?

Tom*_*mmy 6

你能让你的托管网站主机头响应*.mydomain.com吗?这意味着,您的网站是否可以接收主域名的任何子域名请求?如果是这样,那么请参考这篇关于如何处理MVC应用程序中的子域路由的帖子,你应该好好去.

我会更新帖子中的代码,以使代码更简洁.在任何情况下,请确保您尝试转到不存在的子域时遇到404错误.

public class ExampleRoute : RouteBase
{

    public override RouteData GetRouteData(HttpContextBase httpContext)
    {
        var url = httpContext.Request.Headers["HOST"];
        var index = url.IndexOf(".");

        if (index < 0)
            return null;

        var subDomain = url.Substring(0, index);

            var routeData = new RouteData(this, new MvcRouteHandler());
            routeData.Values.Add("controller", subdomain); //attempts to go to controller action of the subdomain
            routeData.Values.Add("action", "Index"); //Goes to the Index action on the User2Controller

            return routeData;
    }

    public override VirtualPathData GetVirtualPath(RequestContext requestContext, RouteValueDictionary values)
    {
        //Implement your formating Url formating here
        return null;
    }
}
Run Code Online (Sandbox Code Playgroud)