Obtener dominio de host de URL?


143

¿Cómo obtener el dominio de host de una URL de cadena?

GetDomain tiene 1 "URL" de entrada, 1 "Dominio" de salida

Ejemplo 1

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

Ejemplo2

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

Ejemplo3

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

Parece que la pregunta es para el host en la URL, y no para el dominio del host, a menos que no entienda completamente el "dominio del host" (en lugar de solo "host"). El hecho de que la respuesta está en la línea de Uri. Es el tipo de apoyo que la pregunta debe actualizarse para reflejar y alinearse mejor con los ejemplos deseados en la pregunta y la respuesta aceptada.
NoOneSpecial

Respuestas:


266

Puede usar Requestobjeto u Uriobjeto para obtener host de url.

Usando Request.Url

string host = Request.Url.Host;

Usando Uri

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

2
Hola, quería usar Request.Url, pero Visual Studio aún devuelve No se puede resolver el símbolo 'Solicitud'. No sé lo que está mal. Yo uso Visual Studio 2010 y Net Framework 4.0. ¿Alguien puede explicar el síntoma? Gracias
Michal

1
Debe tener disponible el objeto Solicitud que tiene en las páginas web / servicios, pero no detrás de eso de manera predeterminada. Puede usar la clase Uri si no tiene un objeto Solicitud disponible
Adil

54

Intenta así;

Uri.GetLeftPart( UriPartial.Authority )

Define las partes de un URI para el método 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

Use la clase Uri y use la propiedad Host

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

15

intente la siguiente declaración

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

Ejemplo 1

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

Ejemplo2

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

no funciona si myuri.PathAndQuery es "/" simplemente reemplaza "/" con ""
Patrick del equipo NDepend

9

La mejor manera y la forma correcta de hacerlo es usando el Uri.Authoritycampo

Cargue y use Uri así:

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

Si desea manipular Url, usar el objeto Uri es la buena manera de hacerlo. https://msdn.microsoft.com/en-us/library/system.uri(v=vs.110).aspx


1

Prueba esto

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

Saldrá support.domain.com

O tratar

Uri.GetLeftPart( UriPartial.Authority )


-2

WWW es un alias, por lo que no lo necesita si desea un dominio. Aquí está mi pequeña función para obtener el dominio real de una cadena

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;

    }
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.