HttpRequest.Host.Url разрешает что-то отличное от доменного имени запроса - возможные виновники? - PullRequest
2 голосов
/ 14 марта 2011

У меня на веб-хосте запущено приложение ASP.NET.Существует некоторая логика, которая вызывает

(HttpRequest)Request.Host.Url

для динамического создания некоторых URL-адресов для использования в тегах привязки.На моем локальном dev environemnt, результат, как ожидалось, а именно "localhost" для Host.Url.

Однако на рабочем сервере все не так, как я ожидал.URL-адрес страницы, которую я загружаю, выглядит следующим образом:

http://www.example.com/forms/someform.aspx

Логика, которая использует HttpRequest.Url.Host, создает некоторые ссылки для страницы, и в результате получается:

http://www.example.com.z82.webhostname.com/forms/somfform.aspx

Что может быть причиной этого?У меня сложилось впечатление, что HttpRequest.Url.Host основан на заголовках http-запроса, который в случае загрузки страницы является основным www.example.com.

Если веб-хостинг использует какой-либо прокси-сервер для перенаправления запроса (в отличие от восстановления DNS непосредственно на ответственный сервер ASP.NET), это приведет к этой проблеме?Или это может быть что-то еще?

Ответы [ 2 ]

0 голосов
/ 29 августа 2012

Я полагаю, что Request.Url.Host изображает любой обратный DNS, с которым сталкивался стек TCP вашего клиента.То же самое происходит, если я ping www.google.com;Я получаю Pinging www.l.google.com [74.125.227.51] with 32 bytes of data....Не тот же хост.

Если вы хотите, чтобы точное имя хоста было введено в адресную строку браузера, используйте заголовок HTTP Host: Request.Headers["Host"]

Обратите внимание, что Request.Headers["Host"] будет включатьномер порта, если он присутствует в адресной строке, поэтому, если вы ожидаете только имя хоста, используйте Request.Headers["Host"].Split(':')[0].

0 голосов
/ 24 мая 2012

Я наблюдал подобное поведение, но я не очень хорошо понимаю, почему .NET / IIS обрабатывает запрос таким странным образом. Другой интересный тест - использовать Request.Url.ToString(), который сообщит об одном адресе, а затем использовать string.Replace() (или другой строковый метод), который сообщит о другом адресе.

Похоже, что это связано с записями DNS (настройки среды в целом).

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