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

Как получить текущее доменное имя в ASP.NET

Я хочу получить текущее имя домена в asp.net С#.

Я использую этот код.

string DomainName = HttpContext.Current.Request.Url.Host;

Мой URL localhost:5858, но он возвращает только localhost.

Теперь я использую свой проект в localhost. Я хочу получить localhost: 5858.

В другом примере, когда я использую этот домен

www.somedomainname.com

Я хочу получить somedomainname.com

Пожалуйста, дайте мне представление о том, как получить текущее доменное имя.

4b9b3361

Ответ 1

Использование Request.Url.Host является подходящим - как вы извлекаете значение заголовка HTTP Host:, которое указывает, какое имя хоста (имя домена) требуется UA (браузер), поскольку часть пути к ресурсу HTTP-запроса делает не включать имя хоста.

Обратите внимание, что localhost:5858 не является именем домена, это спецификатор конечной точки, также известный как "авторитет", который включает имя хоста и номер порта TCP. Это извлекается путем доступа к Request.Uri.Authority.

Кроме того, недопустимо получить somedomain.com из www.somedomain.com, потому что веб-сервер может быть настроен для обслуживания другого сайта для www.somedomain.com по сравнению с somedomain.com, однако, если вы уверены, что это действительно в вашем случае то вам нужно вручную проанализировать имя хоста, хотя использование String.Split('.') работает в крайнем случае.

Обратите внимание, что конфигурация веб-сервера (IIS) отличается от конфигурации ASP.NET и что ASP.NET на самом деле полностью не знает настройки привязки HTTP к веб-сайтам и веб-приложениям, в которых она работает. Тот факт, что как IIS, так и ASP.NET используют одни и те же файлы конфигурации (web.config), является красной серой.

Ответ 2

Попробуйте получить "левую часть" URL-адреса, например:

string domainName = HttpContext.Current.Request.Url.GetLeftPart(UriPartial.Authority);

Это даст вам либо http://localhost:5858, либо https://www.somedomainname.com, независимо от того, находитесь ли вы на локальном или производственном уровне. Если вы хотите удалить часть www, вы должны настроить IIS для этого, но это другая тема.

Обратите внимание, что результирующий URL не будет иметь косую черту.

Ответ 3

Вот скриншот Request.RequestUri и всех его свойств для всех ссылок.

введите описание изображения здесь

Ответ 4

Вы можете попробовать следующий код:

 Request.Url.Host +
    (Request.Url.IsDefaultPort ? "" : ":" + Request.Url.Port)

Ответ 5

www.somedomain.com - это домен/хост. Субдомен является важной частью. www. часто используется взаимозаменяемо, не имея одного, но это должно быть настроено как правило (даже если оно установлено по умолчанию), потому что они не эквивалентны. Подумайте о другом субдомене, например mx.. Вероятно, у него другая цель, чем www..

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

Лично я предлагаю для этого специальный обрез www..

string host = HttpContext.Current.Request.Url.GetComponents(UriComponents.HostAndPort, UriFormat.Unescaped);;

if (host.StartsWith("www."))
    return host.Substring(4);
else
    return host;

В противном случае, если вы действительно на 100% уверены, что хотите отрубить какой-либо субдомен, вам понадобится нечто более сложное.

string host = ...;

int lastDot = host.LastIndexOf('.');

int secondToLastDot = host.Substring(0, lastDot).LastIndexOf('.');

if (secondToLastDot > -1)
    return host.Substring(secondToLastDot + 1);
else
    return host;

Получение порта точно так же, как говорили другие люди.

Ответ 6

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

ServerVariables["SERVER_NAME"] и ServerVariables["HTTP_URL"] должны получить то, что вы ищете

Ответ 7

HttpContext.Current.Request.Url.Host возвращает правильные значения. Если вы запустите его на www.somedomainname.com, он даст вам www.somedomainname.com. Если вы хотите получить 5858, вы также должны использовать

HttpContext.Current.Request.Url.Port 

Ответ 8

Вы можете попробовать следующий код, чтобы получить полное доменное имя:

Request.Url.Scheme + System.Uri.SchemeDelimiter + Request.Url.Host

Ответ 9

Вот быстрый простой способ получить имя URL.

            var urlHost = HttpContext.Current.Request.Url.Host;

            var xUrlHost = urlHost.Split('.');
            foreach(var thing in xUrlHost)
            {
                if(thing != "www" && thing != "com")
                {
                    urlHost = thing;
                }
            }

Ответ 10

Чтобы получить базовый URL в MVC даже с поддоменом www.somedomain.com/subdomain:

var url = $"{Request.Url.GetLeftPart(UriPartial.Authority)}{Url.Content("~/")}";

Ответ 11

Попробуйте это:

@Request.Url.GetLeftPart(UriPartial.Authority)