Получить домен хоста по URL?

146

как получить домен хоста из строкового URL?

GetDomain имеет 1 входной «URL», 1 выходной «Домен»

Пример1

INPUT: http://support.domain.com/default.aspx?id=12345
OUTPUT: support.domain.com

Пример2

INPUT: http://www.domain.com/default.aspx?id=12345
OUTPUT: www.domain.com

Пример 3

INPUT: http://localhost/default.aspx?id=12345
OUTPUT: localhost
001
источник
Похоже, что вопрос касается хоста в URL-адресе, а не домена хоста, если я полностью не понимаю «домен хоста» (в отличие от просто «хоста»). Тот факт, что ответ соответствует типу Uri.Host, поддерживает то, что вопрос следует обновить, чтобы лучше отразить и согласовать с желаемыми примерами в вопросе и принятым ответом.
NoOneSpecial

Ответы:

278

Вы можете использовать Requestобъект или Uriобъект для получения хоста URL.

Использование Request.Url

string host = Request.Url.Host;

Использование Uri

Uri myUri = new Uri("http://www.contoso.com:8080/");   
string host = myUri.Host;  // host is "www.contoso.com"
Адиль
источник
2
Привет, я хотел использовать Request.Url, но Visual Studio по-прежнему возвращает Cannot resolve symbol «Request». Я не знаю что не так. Я использую Visual Studio 2010 и Net Framework 4.0. Кто-нибудь может объяснить симптом? Спасибо
Михал
1
Вам необходимо иметь доступный объект Request, который у вас есть на веб-страницах / сервисах, но не за ним по умолчанию. Вы можете использовать класс Uri, если у вас нет доступного объекта Request
Адиль
58

Попробуйте вот так;

Uri.GetLeftPart( UriPartial.Authority )

Определяет части URI для метода Uri.GetLeftPart.


http://www.contoso.com/index.htm?date=today -> http://www.contoso.com

http://www.contoso.com/index.htm#main -> http://www.contoso.com

nntp: //news.contoso.com/123456@contoso.com -> nntp: //news.contoso.com

file: //server/filename.ext -> file: // server

Uri uriAddress = new Uri("http://www.contoso.com/index.htm#search");
Console.WriteLine("The path of this Uri is {0}", uriAddress.GetLeftPart(UriPartial.Authority));

Demo

Сонер Генюль
источник
28

Используйте класс Uri и используйте свойство Host

Uri url = new Uri(@"http://support.domain.com/default.aspx?id=12345");
Console.WriteLine(url.Host);
Хабиб
источник
17

попробуйте следующее заявление

 Uri myuri = new Uri(System.Web.HttpContext.Current.Request.Url.AbsoluteUri);
 string pathQuery = myuri.PathAndQuery;
 string hostName = myuri.ToString().Replace(pathQuery , "");

Пример1

 Input : http://localhost:4366/Default.aspx?id=notlogin
 Ouput : http://localhost:4366

Пример2

 Input : http://support.domain.com/default.aspx?id=12345
 Output: support.domain.com
СивахГаурав
источник
не работает, если myuri.PathAndQuery - "/", просто замените "/" на ""
Патрик из команды
9

Лучший способ и правильный способ сделать это - использовать Uri.Authorityполе

Загрузите и используйте Uri так:

Uri NewUri;

if (Uri.TryCreate([string with your Url], UriKind.Absolute, out NewUri))
{
     Console.Writeline(NewUri.Authority);
}

Input : http://support.domain.com/default.aspx?id=12345
Output : support.domain.com

Input : http://www.domain.com/default.aspx?id=12345
output : www.domain.com

Input : http://localhost/default.aspx?id=12345
Output : localhost

Если вы хотите манипулировать URL-адресом, использование объекта Uri - хороший способ сделать это. https://msdn.microsoft.com/en-us/library/system.uri(v=vs.110).aspx

Гийом Бовуа
источник
1

Попробуй это

Console.WriteLine(GetDomain.GetDomainFromUrl("http://support.domain.com/default.aspx?id=12345"));

Он выведет support.domain.com

Или попробуйте

Uri.GetLeftPart( UriPartial.Authority )
soniccool
источник
1
 var url = Regex.Match(url, @"(http:|https:)\/\/(.*?)\/");

INPUT = "/programming/";

ВЫХОД = "https://stackoverflow.com/";

user7419192
источник
0

Вы должны создать свою строку как объект URI, а свойство Authority возвращает то, что вам нужно.

Джан Гуней Аксакаллы
источник
-3

WWW - это псевдоним, поэтому он вам не нужен, если вам нужен домен. Вот моя маленькая функция для получения реального домена из строки

private string GetDomain(string url)
    {
        string[] split = url.Split('.');
        if (split.Length > 2)
            return split[split.Length - 2] + "." + split[split.Length - 1];
        else
            return url;

    }
Ксавий Пупус
источник