2009-07-31 11 views

Respuesta

73

HttpContext.Current.Request.Url puede obtener toda la información en la URL. Y puede descomponer la url en sus fragmentos.

+1

Hmm ¿por qué el voto hacia abajo? – JoshBerke

+4

Sí, ¿por qué votar abajo? No vea algo marcado como la respuesta -y- downvoted a menudo. :/ – Zack

+4

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

16

Para obtener toda la cadena de solicitud de URL:

HttpContext.Current.Request.Url 

Para obtener la porción www.foo.com de la solicitud:

HttpContext.Current.Request.Url.Host 

Tenga en cuenta que usted es, hasta cierto punto, en el piedad de factores fuera de su aplicación ASP.NET. Si IIS está configurado para aceptar múltiples o cualquier encabezado de host para su aplicación, cualquiera de esos dominios que se resolvió para 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í –

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

C# siguiente ejemplo:

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

Para alguien todavía se pregunta, una respuesta más completa está 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 http: // server: 8080/MySiteName, lo obtiene correctamente. –

+2

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

+0

No hay problema. Me encontré con respuestas que incluyen enlaces a otros sitios y es frustrante cuando el enlace se rompe y luego tengo que buscar en el caché de Google o Wayback Machine para el contenido. –

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

Uri::GetLeftPart Method:

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

UriPartial Enumeration:

El esquema y de autoridad segmentos de la URI.

+5

Mucho mejor que analizar Url! – Evgenyt

+1

¡esta es la mejor respuesta! tnx! – AminM

+0

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

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;         
} 
3

Sé que esto es antiguo, pero la forma correcta de hacer esto ahora es

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

que hará que la dirección DNS o IP con el puerto para un servidor.

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

host.com => volver host.com
s.host.com => retorno host.com

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

+0

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

+0

@nquenault alguna idea sobre la mejor manera de manejar un nombre de host como www.abc.com? ¡Gracias! –

1

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

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 pide (sin http: //).

2

Esto funciona también:

cadena url = HttpContext.Request.Url.Authority;

20

Si ejemplo Url es http://www.foobar.com/Page1

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


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


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


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

--Adding el puerto puede ayudar cuando se ejecuta IIS expreso

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