Отримати домен хоста з URL-адреси?


143

як отримати домен хоста з 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

Здається, питання полягає в хості в URL-адресі, а не в домені хоста, якщо я повністю не розумію "домен хоста" (на відміну від просто "хоста"). Справа в тому, що відповідь відповідає принципам Uri.Host підтримує те, що питання слід оновити, щоб краще відобразити та узгодити бажані приклади у питанні та прийнятій відповіді.
NoOneSpecial

Відповіді:


266

Ви можете використовувати 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 все ще повертає символ Неможливо вирішити "Запити". Я не знаю, що не так. Я використовую Visual Studio 2010 та Net Framework 4.0. Хтось може пояснити симптом? Спасибі
Міхал

1
Потрібно мати доступний об’єкт Request, який ви маєте на веб-сторінках / послугах, але не за замовчуванням. Ви можете клас Uri , якщо у вас немає запиту об'єкта доступні
Аділь

54

Спробуйте так;

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

файл: //server/filename.ext -> файл: // сервер

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);

15

спробуйте наступне твердження

 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 є "/" він просто замінить "/" на ""
Патрік з команди NDepend

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 )


-2

WWW - псевдонім, тому він вам не потрібен, якщо ви хочете домен. Ось моя функція litllte для отримання реального домену з рядка

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;

    }
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.