Почему Request.Url.Authority возвращает внутренний путь, а не мой домен - PullRequest
2 голосов
/ 03 января 2012

Я работаю над последними выпусками приложения, которое будет запущено на этой неделе. Мне нужна помощь, чтобы изменить мой код или объяснить нашим хостерам, что им нужно исправить в конфигурациях IIS / DNS, чтобы этот код работал должным образом.

Вот код:

public string BaseSiteUrl
{
    get
    {
        var c = this.ControllerContext.RequestContext.HttpContext;
        string baseUrl = c.Request.Url.Scheme + "://" + c.Request.Url.Authority
                       + c.Request.ApplicationPath.TrimEnd('/') + '/';
        return baseUrl;
    }
}

Я вызываю это в моем контроллере, чтобы сгенерировать URL, который сохраняется в базе данных.

Работает нормально, когда я работаю на локальной машине. Однако он не работает при запуске на бета-сервере.

Ожидаемые результаты на бета-версии. На бета-сервере это приложение с именем dr405

Фактический результат на бета-версии. (Ради безопасности я изменил имена серверов / доменов на те, что вы видите в CAPS)

Ответы [ 3 ]

1 голос
/ 03 января 2012

Не думаю, что вам нужен метод, который вы написали.Существует класс UrlHelper, который добавляет методы расширения.Чтобы получить базовый URL для вашего сайта, вы должны использовать метод Content() следующим образом:

var baseUrl = Url.Content("~/");

В вашем примере, похоже, что результат http://SERVERNAME1.GROUP1.SUBGROUP.local/dr405/ является внутреннимимя хоста.На вашей машине для разработки внутренний хост соответствует вашему общедоступному .Ваш хостинг-провайдер вряд ли сможет изменить это для вас, особенно если это решение для общего хостинга.

0 голосов
/ 04 января 2012

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

0 голосов
/ 03 января 2012

Если вы находитесь за балансировщиком нагрузки или подобным, возможно, стоит проверить переменные сервера.В нашем случае мы делаем что-то вроде этого:

string hostName = Request.Headers["x-forwarded-host"];
hostName = string.IsNullOrEmpty(hostName) ? Request.Url.Host : hostName;

Этот вопрос, который я задал некоторое время назад, может быть интересен:

Asp.net mvc 301 redirect с www.domain.com to domain.com

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