Маршрутизация поддоменов с помощью MVC3 - PullRequest
2 голосов
/ 05 августа 2011

Я хочу создать службу для некоторых из моих клиентов, которая позволит им иметь свою собственную веб-страницу на сайте MVC3, который я построил.

Я хочу, чтобы у бизнеса была возможность иметь URL, которыйвыглядит как www.BusinessName.mydomain.com

Возможно ли создать маршрут в MVC3, который позволит мне это сделать?

Спасибо за вашу помощь

Хорошо, такЯ думаю, что я продвинулся немного дальше.

В идеале я хочу иметь возможность иметь подстановочный знак для субдомена в IIS, однако из проведенного мною исследования кажется, что это невозможно.

Я вручную добавил www.mycompany.mydomain.com в IIS и обновил свой global.ascx, чтобы он содержал

   public class SubDomainRoute : RouteBase
    {

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

            var subDomain = Helpers.Helpers.GetSubDomain(url);
            if (subDomain==null)
                return null;
            var routeData = new RouteData(this, new MvcRouteHandler());

            switch (subDomain)
            {
                case "mycompany":
                    routeData.Values.Add("controller", "SubDomain");
                    routeData.Values.Add("action", "Index");
                    break;
                default:
                    routeData.Values.Add("controller", "Home");
                    routeData.Values.Add("action", "Index");
                    break;
            }

            return routeData;
        }

        public override VirtualPathData GetVirtualPath(RequestContext requestContext, RouteValueDictionary values)
        {
            return null;
        }
    }

Так что теперь я могу просматривать www.mycompanyname.mydomain.com и правильный контроллерзагружен.

У меня сейчас 2 проблемы.

Если я захожу на сайт www.mistake.mydomain.com, я получаю ошибку 502.Что я могу сделать в IIS для перенаправления на www.mydomain.com, если www.mistake.mydomain.com не найден?

После того, как я перешел на www.mycompanyname.mydomain.com, все ссылки внутримое главное меню теперь указывает, например, на www.mycompanyname.mydomain.com/contactus, что неправильно, как я могу убедиться, что пункты меню не используют субдомен в URL?

1 Ответ

0 голосов
/ 25 сентября 2011

Я бы предложил немного другой подход - единственное предостережение в том, что этот веб-сайт должен быть единственным на IIS. Поскольку IIS не поддерживает подстановочные заголовки узлов, это должен быть веб-сайт по умолчанию.

Таким образом, вы получите все запросы (включая www.mistake.mydomain.com) на входную дверь вашего приложения, и вы сможете соответствующим образом их обработать.

В вашем приложении MVC не используйте маршрутизацию для поддоменов, используйте Application_BeginRequest. Там вы делаете то, что должны делать с Request.Headers ["HOST"] и отправляете их туда, куда хотите.

На мой взгляд, маршруты предназначены для маршрутизации пользователя, когда он попадает на сайт, а не для того, чтобы решить, какой пользователь посещает сайт ...

...