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 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.