¿Cómo puedo obtener el URI del dominio raíz en ASP.NET?


Respuestas:


79

HttpContext.Current.Request.Url puede obtener toda la información sobre la URL. Y puede dividir la URL en fragmentos.


4
Sí, ¿por qué el voto negativo? No vea algo marcado como la respuesta y que se haya votado negativamente a menudo. : /
Zack

4
Tampoco me gusta esta respuesta. blesh ha dado el correcto y esto debería haber sido marcado como la respuesta ...
Michal B.

-1 - Request.Url a menudo proporciona una URL como "/ carpeta1 / carpeta2" y excluye el dominio por completo.
Justin

4
@Justin: Request.Url te da un objeto Uri que tiene todas las piezas desglosadas para ti. No debería darte una cuerda. Al menos no en la versión de .net que estoy usando
JoshBerke

6
Esta respuesta podría mejorarse agregando el código que lo hace funcionar como la respuesta a continuación que tiene más votos arriba ...
theJerm

171
string baseUrl = Request.Url.GetLeftPart(UriPartial.Authority);

Método Uri :: GetLeftPart :

El método GetLeftPart devuelve una cadena que contiene la parte más a la izquierda de la cadena URI, que termina con la parte especificada por part.

Enumeración UriPartial :

El esquema y los segmentos de autoridad del URI.


5
¡Mucho mejor que analizar la URL!
Evgenyt

1
esta es la mejor respuesta! tnx!
AminM

Esta debería ser la respuesta seleccionada. Demasiada manipulación de cadenas innecesaria.
Ghasan

1
Usando este método, http: // www.lala.xxx/blah/blah devolverá http: // www.lala.xxx
live-love

+1 Y no es lo mismo que .Authority que, en las pruebas que hice en localhost, omite la parte del protocolo (http: //).
GGleGrand

122

Para cualquiera que todavía se lo pregunte, hay una respuesta más completa disponible en http://devio.wordpress.com/2009/10/19/get-absolut-url-of-asp-net-application/ .

public string FullyQualifiedApplicationPath
{
    get
    {
        //Return variable declaration
        var appPath = string.Empty;

        //Getting the current context of HTTP request
        var context = HttpContext.Current;

        //Checking the current context content
        if (context != null)
        {
            //Formatting the fully qualified website url/name
            appPath = string.Format("{0}://{1}{2}{3}",
                                    context.Request.Url.Scheme,
                                    context.Request.Url.Host,
                                    context.Request.Url.Port == 80
                                        ? string.Empty
                                        : ":" + context.Request.Url.Port,
                                    context.Request.ApplicationPath);
        }

        if (!appPath.EndsWith("/"))
            appPath += "/";

        return appPath;
    }
}

4
Funcionó perfectamente. Si el sitio es el servidor: 8080 / MySiteName , lo obtiene correctamente.
Michael La Voie

2
Gracias por compartir el código real en lugar de un enlace en otro lugar.
theJerm

2
context.Request.Url.Port == 80 causará problemas dentro de HTTPS
Evgenyt

7
¡Atención! No funciona para https. Para https tenga que sustituir context.Request.Url.Port == 80 por (context.Request.Url.Port == 80 && context.Request.Url.Scheme == "http") || (context.Request.Url.Port == 443 && context.Request.Url.Scheme == "https")o por debajo utilización respuesta
Razón

1
Funciona también para localhost (si está probando localmente). Si no necesita el puerto, puede usar "http: //" + HttpContext.Current.Request.Url.Host;
CyberHawk

32

Si la URL de ejemplo es http://www.foobar.com/Page1

HttpContext.Current.Request.Url; //returns "http://www.foobar.com/Page1"


HttpContext.Current.Request.Url.Host; //returns "www.foobar.com"


HttpContext.Current.Request.Url.Scheme; //returns "http/https"


HttpContext.Current.Request.Url.GetLeftPart(UriPartial.Authority); //returns "http://www.foobar.com"

1
No no. .Hostde "http://www.foobar.com/Page1"es www.foobar.com, no foobar.com.
tchelidze

1
sí, tienes razón, actualizó la respuesta. @tchelidze gracias
Dheeraj Palagiri

27
string hostUrl = Request.Url.Scheme + "://" + Request.Url.Host; //should be "http://hostnamehere.com"

16

Para obtener la cadena de URL de solicitud completa:

HttpContext.Current.Request.Url

Para obtener la parte www.foo.com de la solicitud:

HttpContext.Current.Request.Url.Host

Tenga en cuenta que, hasta cierto punto, está a merced de factores ajenos a su aplicación ASP.NET. Si IIS está configurado para aceptar varios o cualquier encabezado de host para su aplicación, entonces cualquiera de esos dominios que se resolvieron en su aplicación a través de DNS puede aparecer como la URL de solicitud, dependiendo de cuál ingresó el usuario.


1
la solución más simple aquí
full_prog_full

4
Match match = Regex.Match(host, "([^.]+\\.[^.]{1,3}(\\.[^.]{1,3})?)$");
string domain = match.Groups[1].Success ? match.Groups[1].Value : null;

host.com => regresar host.com
s.host.com => regresar host.com

host.co.uk => return host.co.uk
www.host.co.uk => return host.co.uk
s1.www.host.co.uk => return host.co.uk


Me doy cuenta de que esta es una publicación antigua, pero NQuenault muy bien hecho, no soy bueno en Regex Expressions tan bien hecho. Exactamente lo que necesitaba.
JeffreyJ

@nquenault ¿Alguna idea sobre la mejor manera de manejar un nombre de host como www.abc.com? ¡Gracias!
Gary Ewan Park

4

- Agregar el puerto puede ayudar cuando se ejecuta IIS Express

Request.Url.Scheme + "://" + Request.Url.Host + ":" + Request.Url.Port


3

Sé que esto es más antiguo, pero la forma correcta de hacerlo ahora es

string Domain = HttpContext.Current.Request.Url.Authority

Eso obtendrá la dirección IP o DNS con puerto para un servidor.



1

Ejemplo de C # a continuación:

string scheme = "http://";
string rootUrl = default(string);
if (Request.ServerVariables["HTTPS"].ToString().ToLower() == "on")
{
  scheme = "https://";
}
rootUrl = scheme + Request.ServerVariables["SERVER_NAME"].ToString();

1
string host = Request.Url.Host;
Regex domainReg = new Regex("([^.]+\\.[^.]+)$");
HttpCookie cookie = new HttpCookie(cookieName, "true");
if (domainReg.IsMatch(host))
{
  cookieDomain = domainReg.Match(host).Groups[1].Value;                                
}

1

Esto devolverá específicamente lo que está preguntando.

Dim mySiteUrl = Request.Url.Host.ToString()

Sé que esta es una pregunta anterior. Pero necesitaba la misma respuesta simple y esto devuelve exactamente lo que se pregunta (sin http: //).

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.