Подтвердить что ты не робот

Request.Url.Host vs Request.Url.Authority

Я унаследовал веб-приложение ASP.NET, написанное на С#. На многих страницах по всему сайту имя хоста извлекается с помощью:

BaseHost = Request.Url.Host;

Поскольку я использую Visual Studio 2012 Express и он установил локальный сервер IIS Express, я, похоже, застрял с номером порта, добавленным к имени хоста (localhost), когда я отлаживаю/запускаю локально. Вышеприведенный код не приводит к тому, что номер порта включен и как таковой разрывает ссылки, которые генерируются кодом (ссылки на пункты меню, перенаправления и т.д.).

Я вижу, что я могу решить проблему, изменив код на:

BaseHost = Request.Url.Authority;

Кажется, что это исправлено, включив порт, когда я запускаю локально (localhost: 4652), и когда он опубликован на моем промежуточном сервере (development.mysite.com).

Мой вопрос: эта плохая форма? Есть ли время или ситуация, когда это вызовет проблемы на моем сайте? Кажется намного проще сделать быструю замену всех этих случаев. Я подумывал написать небольшую подпрограмму, чтобы добавить : with Request.Url.Port, но проще просто использовать Request.Url.Authority. Слишком легко, может быть...

Я пытался исследовать свой вопрос в Интернете и в MSDN, но я не вижу ответа.

4b9b3361

Ответ 1

В соответствии с MSDN Authority включает номер порта, а Host - нет. Другой аспект заключается в том, что Authority, если потребуется, сбежит с зарезервированными символами.

Без знания вашего приложения трудно сказать, хорошая ли это идея, но в целом я подозреваю, что ничего не сломает... так что продолжайте...

Другой вариант - запустить приложение IIS вместо IIS Express...

Ответ 2

Моя проблема заключается в том, что он ВСЕГДА добавляет порт, даже если порт не требуется. В некоторых случаях это может вызвать проблемы с несколькими серверами. Например, в среде производственного сервера за брандмауэром на пару балансированных по нагрузке веб-серверов он постоянно помещал порт брандмауэра в место, но это вызвало разрыв URL-адреса, поскольку порт был привязан к определенному веб-серверу в ферме серверов, который не мог бы правильно отображать брандмауэр. Поэтому я был бы очень осторожен с этим методом, если вы используете его на нескольких серверах. Это вызвало проблему с нашим приложением и должно было вернуться к использованию Url.Host. Кроме того, он сделал веб-сайт для создания веб-страниц странным с номером порта.