Как имя хоста может быть включено в отображение маршрута MVC2? - PullRequest
1 голос
/ 18 ноября 2010

У меня есть 3 доменных имени, все они указаны в одном приложении MVC2. Теперь у меня есть homecontroller, действующий как гаишник и перенаправляющий на контроллеры и просматривающий конкретное имя хоста. Но мне не нравится результат URI, который это вызывает ...

например: www.webhost1.com/webhost1/imagegallery www.webhost2.com/webhost2/imagegallery

Я бы предпочел иметь:

www.webhost1.com / imagegallery

Есть ли способ определения маршрутов в global.asax, который бы включал имя хоста в оценку маршрутизации, чтобы URI выглядел менее избыточным?

1 Ответ

5 голосов
/ 08 декабря 2010

Ага !, потребовалось немного возиться (и вершина и старая книга), но я думаю, что я решил это.

Вам необходимо создать собственное ограничение маршрута. Это тот, который я сделал быстро:

 public class hostnameConstraint : IRouteConstraint
    {
        protected string _hostname;

        public hostnameConstraint (string hostname)
        {
            _hostname = hostname;
        }

        bool IRouteConstraint.Match(HttpContextBase httpContext, Route route, string parameterName, RouteValueDictionary values, RouteDirection routeDirection)
        {
            if (httpContext.Request.Url.Host == _hostname)
                return true;
            return false;
        }
    }

Затем вы просто добавляете его в свои маршруты и указываете, к какому имени хоста вы хотите применить маршрут. вот так:

routes.MapRoute(
            "ImageGallery", "{controller}/{action}",
            new { controller = "Home", action = "Index"},
            new { hostname = new hostnameConstraint("webhost1.com") }
        );

routes.MapRoute(
            "ImageGallery", "{controller}/{action}",
            new { controller = "Home", action = "Index"},
            new { hostname = new hostnameConstraint("webhost2.com") }
        );

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...