2014-10-04 6 views
33

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

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

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

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

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

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

www.somedomainname.com 

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

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

+1

Hostname и доменное имя 2 разные вещи. Вы хотите домен, который отображается на ваш конкретный IP-адрес, или имя хоста машины, на которой он запущен? –

+0

Возможный дубликат [Какой лучший метод в ASP.NET для получения текущего домена?] (Http://stackoverflow.com/questions/61817/whats-the-best-method-in-asp-net-to-obtain -the-current-domain) – Gitz

ответ

36

Использование Request.Url.Host подходит - это, как вы получить значение HTTP Host: заголовка, который определяет, какие имя хоста (доменное имя) БВС (браузер) хочет, поскольку часть пути к ресурсу 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), является красной селедкой.

34

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

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

Это даст вам как «локальный: 5858» и «www.somedomainname.com». Если вы хотите удалить WWW, вы должны настроить IIS (который я не знаю, как это сделать).

Смотрите также:

Request.Url.GetLeftPart (UriPartial.Authority);

Request.RequestUri.GetLeftPart (UriPartial.Authority);

Оба будут возвращаться, например: http://localhost:60333/

+2

Это должен быть лучший ответ, на мой взгляд. – Andrew

16

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

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

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

HttpContext.Current.Request.Url.Port 
4

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; 

Как добраться до порта, как и другие люди.

2

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

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

29

Вот скриншот Request.RequestUri и все его свойства для справки каждого.

enter image description here

0

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

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

Хотя этот фрагмент кода может решить вопрос, [включая объяснение] (http://meta.stackexchange.com/questions/114762/explaining-entirely-code-based-answers) действительно помогает улучшить качество вашего сообщения. Помните, что вы отвечаете на вопрос читателей в будущем, и эти люди могут не знать причин вашего предложения кода. –

Смежные вопросы