c# asp.net

c# - Cómo obtener el nombre de dominio actual en ASP.NET



(9)

Quiero obtener el nombre de dominio actual en asp.net c #.

Estoy usando este código.

string DomainName = HttpContext.Current.Request.Url.Host;

Mi URL es localhost:5858 pero solo devuelve localhost .

Ahora, estoy usando mi proyecto en localhost. Quiero conseguir localhost: 5858.

Por otro ejemplo, cuando estoy usando este dominio

www.somedomainname.com

Quiero obtener somedomainname.com

Por favor, dame una idea de cómo obtener el nombre de dominio actual.


Aquí hay una captura de pantalla de Request.RequestUri y todas sus propiedades para referencia de todos.


Aquí hay una forma rápida y sencilla de obtener el nombre de la URL.

var urlHost = HttpContext.Current.Request.Url.Host; var xUrlHost = urlHost.Split(''.''); foreach(var thing in xUrlHost) { if(thing != "www" && thing != "com") { urlHost = thing; } }


El uso de Request.Url.Host es apropiado: es cómo se recupera el valor del Host: HTTP Host: encabezado, que especifica qué nombre de host (nombre de dominio) desea el UA (navegador), ya que la parte de la ruta de recursos de la solicitud HTTP no incluye el nombre de host

Tenga en cuenta que localhost:5858 no es un nombre de dominio, es un especificador de punto final, también conocido como "autoridad", que incluye el nombre de host y el número de puerto TCP. Esto se recupera accediendo a Request.Uri.Authority .

Además, no es válido obtener somedomain.com de www.somedomain.com porque un servidor web podría configurarse para que sirva a un sitio diferente para www.somedomain.com comparación con somedomain.com , sin embargo, si está seguro de que esto es válido en su En este caso, deberá analizar manualmente el nombre de host, aunque el uso de String.Split(''.'') funciona en un apuro.

Tenga en cuenta que la configuración del servidor web (IIS) es distinta de la configuración de ASP.NET, y que ASP.NET es en realidad completamente ignorante de la configuración de enlace HTTP de los sitios web y aplicaciones web en las que se ejecuta. El hecho de que tanto IIS como ASP.NET compartan los mismos archivos de configuración ( web.config ) es una pista falsa.


HttpContext.Current.Request.Url.Host está devolviendo los valores correctos. Si lo ejecuta en www.somedomainname.com, le dará www.somedomainname.com. Si desea obtener el 5858 también necesita usar

HttpContext.Current.Request.Url.Port


Intenta obtener la "parte izquierda" de la url, así:

string domainName = HttpContext.Current.Request.Url.GetLeftPart(UriPartial.Authority);

Esto le dará a usted http://localhost:5858 o https://www.somedomainname.com ya sea que esté en la producción local o local. Si desea eliminar la parte www , debe configurar IIS para hacerlo, pero ese es otro tema.

Tenga en cuenta que la URL resultante no tendrá una barra diagonal.


Puedes probar el siguiente código para obtener un nombre de dominio completo:

Request.Url.Scheme + System.Uri.SchemeDelimiter + Request.Url.Host


Puedes probar el siguiente código:

Request.Url.Host + (Request.Url.IsDefaultPort ? "" : ":" + Request.Url.Port)


el objeto Request.ServerVariables funciona para mí. No conozco ninguna razón para no usarlo.

ServerVariables["SERVER_NAME"] y ServerVariables["HTTP_URL"] deben obtener lo que está buscando


www.somedomain.com es el dominio / host. El subdominio es una parte importante. www. a menudo se usa indistintamente con no tener uno, pero eso debe configurarse como una regla (incluso si está configurado de forma predeterminada) porque no son equivalentes. Piensa en otro subdominio, como mx. . Eso probablemente tiene un objetivo diferente al de www. .

Teniendo en cuenta eso, aconsejaría no hacer este tipo de cosas. Dicho esto, ya que estás preguntando, imagino que tienes una buena razón.

Personalmente, sugeriría www. para esto.

string host = HttpContext.Current.Request.Url.GetComponents(UriComponents.HostAndPort, UriFormat.Unescaped);; if (host.StartsWith("www.")) return host.Substring(4); else return host;

De lo contrario, si está realmente seguro al 100% de que desea cortar cualquier subdominio, necesitará algo un poco más complicado.

string host = ...; int lastDot = host.LastIndexOf(''.''); int secondToLastDot = host.Substring(0, lastDot).LastIndexOf(''.''); if (secondToLastDot > -1) return host.Substring(secondToLastDot + 1); else return host;

Obtener el puerto es como lo han dicho otras personas.