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 regresa localhost
.
Ahora, estoy usando mi proyecto en localhost. Quiero obtener localhost: 5858.
Para otro ejemplo, cuando estoy usando este dominio
www.somedomainname.com
Quiero tener somedomainname.com
Por favor, dame una idea de cómo obtener el nombre de dominio actual.
Respuestas:
El uso
Request.Url.Host
es apropiado: es la forma en que recupera el valor delHost:
encabezado HTTP , que especifica qué nombre de host (nombre de dominio) quiere 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 accediendoRequest.Uri.Authority
.Por otra parte, no es válida para obtener
somedomain.com
a partirwww.somedomain.com
debido a que un servidor web puede ser configurado para servir a un sitio diferente parawww.somedomain.com
comparación consomedomain.com
, sin embargo, si está seguro de que esto es válido en su caso, entonces tendrá que analizar manualmente el nombre de host, aunque el uso deString.Split('.')
obras en las una pizca.Tenga en cuenta que la configuración del servidor web (IIS) es distinta de la configuración de ASP.NET, y que ASP.NET en realidad ignora por completo la configuración de enlace HTTP de los sitios web y las 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.fuente
Intente obtener la "parte izquierda" de la URL, así:
string domainName = HttpContext.Current.Request.Url.GetLeftPart(UriPartial.Authority);
Esto le dará bien
http://localhost:5858
ohttps://www.somedomainname.com
si usted está en local o de producción. Si desea eliminar lawww
pieza, debe configurar IIS para hacerlo, pero ese es otro tema.Tenga en cuenta que la URL resultante no tendrá una barra al final.
fuente
http://localhost:60333
Aquí hay una captura de pantalla
Request.RequestUri
y todas sus propiedades para referencia de todos.fuente
Puedes probar el siguiente código:
Request.Url.Host + (Request.Url.IsDefaultPort ? "" : ":" + Request.Url.Port)
fuente
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. Piense en otro subdominio, comomx.
. Probablemente tenga un objetivo diferente alwww.
.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 una carcasa especial
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 100% seguro de que desea eliminar 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;
Conseguir el puerto es como han dicho otras personas.
fuente
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 también el 5858, debe usar
fuente
el
Request.ServerVariables
objeto funciona para mí. No conozco ninguna razón para no usarlo.ServerVariables["SERVER_NAME"]
yServerVariables["HTTP_URL"]
debería conseguir lo que estás buscandofuente
Puede probar el siguiente código para obtener un nombre de dominio completo:
fuente
A continuación, se muestra 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; } }
fuente
Prueba esto:
@ Request.Url.GetLeftPart (UriPartial.Authority)
fuente
Para obtener la URL base en MVC incluso con subdominio
www.somedomain.com/subdomain
:var url = $"{Request.Url.GetLeftPart(UriPartial.Authority)}{Url.Content("~/")}";
fuente