Pobrać domenę hosta z adresu URL?


143

jak uzyskać domenę hosta z adresu URL w postaci ciągu znaków?

GetDomain ma 1 wejście „URL”, 1 wyjście „Domena”

Przykład 1

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

Przykład 2

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

Przykład 3

INPUT: http://localhost/default.aspx?id=12345
OUTPUT: localhost

Wygląda na to, że pytanie dotyczy hosta w adresie URL, a nie domeny hosta, chyba że całkowicie źle zrozumiałem „domenę hosta” (w przeciwieństwie do samego „hosta”). Fakt, że odpowiedź jest zgodna z typem Uri.Host, który zapewnia, że ​​pytanie powinno zostać zaktualizowane, aby lepiej odzwierciedlało i pasowało do pożądanych przykładów w pytaniu i zaakceptowanej odpowiedzi.
NoOneSpecial

Odpowiedzi:


266

Możesz użyć Requestobiektu lub Uriobiektu, aby uzyskać host adresu URL.

Korzystanie z Request.Url

string host = Request.Url.Host;

Korzystanie z Uri

Uri myUri = new Uri("http://www.contoso.com:8080/");   
string host = myUri.Host;  // host is "www.contoso.com"

2
Cześć, chciałem użyć Request.Url, ale program Visual Studio nadal zwraca Nie można rozwiązać symbolu „Żądanie”. Nie wiem, co się stało. Używam Visual Studio 2010 i Net Framework 4.0. Czy ktoś może wyjaśnić objaw? Dzięki
Michał

1
Musisz mieć dostępny obiekt Request, który masz na stronach internetowych / usługach, ale nie za nim domyślnie. Możesz klasę Uri, jeśli nie masz dostępnego obiektu Request
Adil

54

Spróbuj w ten sposób;

Uri.GetLeftPart( UriPartial.Authority )

Definiuje części identyfikatora URI dla metody 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

Użyj klasy Uri i użyj właściwości Host

Uri url = new Uri(@"http://support.domain.com/default.aspx?id=12345");
Console.WriteLine(url.Host);

15

spróbuj wykonać następujące stwierdzenie

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

Przykład 1

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

Przykład 2

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

nie działa, jeśli myuri.PathAndQuery ma wartość „/”, po prostu zamień „/” na „”
Patrick z zespołu NDepend

9

Najlepszym sposobem i właściwym sposobem na to jest użycie Uri.Authoritypola

Załaduj i używaj Uri w następujący sposób:

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

Jeśli chcesz manipulować Url, użyj obiektu Uri, aby to zrobić. https://msdn.microsoft.com/en-us/library/system.uri(v=vs.110).aspx


1

Spróbuj tego

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

Wyprowadzi support.domain.com

Albo spróbuj

Uri.GetLeftPart( UriPartial.Authority )


-2

WWW to alias, więc nie potrzebujesz go, jeśli chcesz mieć domenę. Oto moja funkcja litllte do pobierania prawdziwej domeny z ciągu

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;

    }
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.