Как использовать субдомен в качестве значения маршрута в MVC2 - PullRequest
4 голосов
/ 18 ноября 2010

первый:

Я прочитал и попытался внедрить это и это и , что , но мне это не удалось: (

мой маршрут похож на:

routes.MapRoute(
    "DefaultRoute",
    "{calurl}/{controller}/{action}/{id}",
    new { calurl = "none", controller = "Subscriber", action = "Index", id = UrlParameter.Optional }
);

и я пытаюсь использовать как

"{calurl}.domain.com",
"{controller}/{action}/{id}"

поэтому перенаправленное значение calurl всегда будет исходить из субдомена.

и у меня могут быть ссылки вроде:

http://demo.domain.com/Subscriber/Register

на сегодня у меня

http://domain.com/demo/Subscriber/Register

Что я пробовал

Я попытался создать свой собственный CustomRoute, используя пример ссылок выше (все 3, по одной за раз), и в итоге я всегда все испортил.

и я продолжаю думать, что это слишком много кода, просто чтобы заменить RouteValue["calurl"] на поддомен.

Что / Как я могу это сделать?

Ответы [ 2 ]

1 голос
/ 29 декабря 2010

Если у вас есть IIS7, почему бы не использовать правило перезаписи URL?

Это, вероятно, будет лучше, чем хакерская работа с вашими маршрутами, а IIS сделает то, что лучше всего.* Вероятно, что-то вроде этого:

<rule name="rewriteSubdomains" stopProcessing="true">
  <match url="(.*).domain.com/(.*)" />
  <action type="Rewrite" url="domain.com/{R:1}/{R:2}" />
</rule>

Таким образом, ваш маршрут будет правильно обрабатывать поддомен, так как он входит в приложение по-разному.

1 голос
/ 18 ноября 2010

Я не уверен, распространяется ли маршрутизация на фактическое доменное имя, поскольку домен или поддомен не должны влиять на работу сайта / приложения.

Я бы предложил создавать собственное обнаружение поддомена для каждого запроса. Это позволяет отделить маршрутизацию и обнаружение поддоменов и поможет в тестировании и т. Д.

Это может помочь:

public static string GetSubDomain()
        {
            string subDomain = String.Empty;

            if (HttpContext.Current.Request.Url.HostNameType == UriHostNameType.Dns)
            {
                subDomain = Regex.Replace(HttpContext.Current.Request.Url.Host, "((.*)(\\..*){2})|(.*)", "$2").Trim().ToLower();
            }

            if (subDomain == String.Empty)
            {
                subDomain = HttpContext.Current.Request.Headers["Host"].Split('.')[0];
            }

            return subDomain.Trim().ToLower();
        }
...