Заголовок хоста HTTP как значение маршрута - PullRequest
2 голосов
/ 20 июля 2010

Я пытаюсь обслуживать несколько виртуальных хостов из одной кодовой базы.У меня была мысль передать заголовок HTTP Host в качестве значения маршрута, потому что я не хотел полагаться на HttpContext в контроллерах из-за тестируемости модуля.класс или что-то в этом роде.Я попытался передать в качестве значения маршрута, как это:

routes.MapRoute(
  "Default", // Route name
  "{controller}/{action}/{id}", // URL with parameters
  new { host = HttpContext.Current.Request.Url.Host, controller = "Home", action = "Index", id = UrlParameter.Optional } // Parameter defaults
);

Это приводит к HttpException: запрос не доступен в этом контексте.быть оцененным.

Ответы [ 2 ]

3 голосов
/ 20 июля 2010

Вы должны хорошо полагаться на контекст при тестировании вашего контроллера.Система маршрутизации была разработана с учетом тестируемости, поэтому вы можете установить фиктивный контекст, который обеспечивает правильный URL-адрес при выполнении ваших тестов.

Причина, по которой ваш код не работает, заключается в том, что вы, вероятно, вызываете его изглобальное Application_Start событие, которое происходит до того, как поступит первый запрос. Это означает, что объект HttpContext в это время недоступен.

0 голосов
/ 30 января 2011

Попробуйте изменить HomeController следующим образом:

public ActionResult Index() {
    var request = HttpContext.Request.Url;

    if (request != null && request.AbsoluteUri.Contains("domain.com")) {
        //take the desired action and redirect here
    }

    //the rest of home controller logic
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...