Host-Domain von URL abrufen?


143

Wie bekomme ich eine Host-Domain von einer String-URL?

GetDomain hat 1 Eingabe "URL", 1 Ausgabe "Domain"

Beispiel 1

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

Beispiel2

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

Beispiel3

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

Es scheint, dass die Frage für den Host in der URL und nicht für die Domain des Hosts ist, es sei denn, ich verstehe "Host-Domain" völlig falsch (im Gegensatz zu nur "Host"). Die Tatsache, dass die Antwort im Sinne von Uri.Host ist, unterstützt, dass die Frage aktualisiert werden sollte, um die gewünschten Beispiele in der Frage und die akzeptierte Antwort besser widerzuspiegeln und mit ihnen in Einklang zu bringen .
NoOneSpecial

Antworten:


266

Sie können RequestObjekt oder UriObjekt verwenden, um den Host der URL abzurufen.

Verwenden von Request.Url

string host = Request.Url.Host;

Mit Uri

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

2
Hallo, ich wollte Request.Url verwenden, aber Visual Studio gibt immer noch zurück. Das Symbol 'Request' kann nicht aufgelöst werden. Ich weiß nicht was los ist. Ich verwende Visual Studio 2010 und Net Framework 4.0. Kann jemand das Symptom erklären? Vielen Dank
Michal

1
Sie müssen ein Anforderungsobjekt verfügbar haben, das Sie auf Webseiten / Diensten haben, jedoch nicht standardmäßig dahinter. Sie können Uri-Klasse, wenn Sie kein Anforderungsobjekt verfügbar haben
Adil

54

Versuchen Sie es so;

Uri.GetLeftPart( UriPartial.Authority )

Definiert die Teile eines URI für die Uri.GetLeftPart-Methode.


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

Datei: //server/filename.ext -> Datei: // 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

Verwenden Sie die Uri- Klasse und die Host- Eigenschaft

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

15

Versuchen Sie die folgende Aussage

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

Beispiel 1

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

Beispiel2

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

funktioniert nicht, wenn myuri.PathAndQuery "/" ist, ersetzt es einfach "/" durch ""
Patrick vom NDepend-Team

9

Der beste und richtige Weg, dies zu tun, ist die Verwendung von Uri.AuthorityFeld

Laden und verwenden Sie Uri wie folgt:

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

Wenn Sie die URL manipulieren möchten, ist die Verwendung des Uri-Objekts der gute Weg, dies zu tun. https://msdn.microsoft.com/en-us/library/system.uri(v=vs.110).aspx


1

Versuche dies

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

Es wird support.domain.com ausgegeben

Oder Versuche

Uri.GetLeftPart( UriPartial.Authority )


-2

WWW ist ein Alias, Sie benötigen ihn also nicht, wenn Sie eine Domain möchten. Hier ist meine Litllte-Funktion, um die reale Domain aus einem String zu erhalten

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;

    }
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.