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