2013-12-16 2 views
1

Мой сайт имеет общедоступный раздел, к которому обращается HTTP и часть https, требующая входа в систему. При выходе из сайта он перенаправляется на страницу общего индекса http.UriBuilder указывает на localhost вместо имени домена

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

Я попытался использовать UriBuilder для преобразования https-ссылок на http-ссылку, чтобы веб-сайт больше не должен использовать прямое указание на определенный URL-адрес. Это должно позволить сайту использовать любое доменное имя. Сейчас он указывает на имя компьютера.

if (Request.IsSecureConnection) 
{ 
    UriBuilder ub = new UriBuilder(); 
    ub.Path = "/html/index.html"; 
    ub.Scheme = Uri.UriSchemeHttp; 
    ub.Port = -1; // use default port for scheme 
    Response.Redirect(ub.Uri.ToString(), true); 

    //An old direct link to the site 
    //Response.Redirect("http://www.someaddress.com/html/index.html"); 
} 

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

http://localhost/html/index.html 

Вместо

http://testserver/html/index.html 

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

ответ

0

Если вы не укажете хост, чем хозяин по умолчанию ("localhost"), то будет использоваться статья UriBuilder() constructor на MSDN.

Исправление: указать хост (возможно, на основе хоста входящего запроса).

ub.Host = GetMeIncomingHost(); 
0

Поскольку в URI, к которому вы перенаправление, вы не указали авторитет (хоста). Таким образом, ваше Перенаправление отправляет статус на 302 Found HTTP и ответ содержит location: заголовка, который выглядит как что-то вроде этого:

location: /html/index.html 

Это является относительным URI, по отношению к текущему URI, с которого перенаправляется запрос. Это означает, что он унаследовал схему и авторитет компонент страницы запроса (который, очевидно, в вашем случае, был http://localhost:xx/...

Чтобы исправить это, семя вашего UriBuilder в его конструктора с HttpContext.Current.Request.Url Это должно примерно это сделать:..

UriBuilder ub = new UriBuilder(HttpContext.Current.Request.Url); 
ub.Path = "/html/index.html"; 
Response.Redirect(ub.Uri.ToString(), true); 
Смежные вопросы