2008-10-21 15 views

Respuesta

2

Puede hacerlo de esta manera:

string.Format("{0}://{1}:{2}", Request.Url.Scheme, Request.Url.Host, Request.Url.Port) 

y obtendrá el protocolo generic URI syntax < >: // < anfitrión >: <puerto>

+0

Me gusta, pero ¿y si no quieres el puerto, si el puerto es 80 ...? - String.Format ((Request.Url.Port! = 80)? "{0}: // {1}: {2}": "{0}: // {1}", Request.Url. Scheme, Request.Url.Host, Request.Url.Port) .... o se romperá porque no hay {2} en algunos casos – stephenbayer

+0

Funciona, acaba de probarlo ... – stephenbayer

+0

Esto no funcionará si su la aplicación se implementa en un directorio virtual. –

1
System.Web.UI.Page.Request.Url 
+0

Esto dará la URL completa de la página –

+0

Pruebe esto: Request.ServerVariables ["SERVER_NAME_PORT"] + Request.ServerVariables ["SERVER_NAME"] + Request.ServerVariables ["SERVER_PORT"] + Request.ApplicationPath; –

1
this.Request.Url.Host 
2

Puede usar algo como esto.

System.Web.HttpContext.Current.Server.ResolveUrl("~/") 

Se asigna a la raíz de la aplicación. ahora si estás dentro de un directorio virtual necesitarás hacer un poco más de trabajo.

Editar

Antiguo publicación contenía incorrecta llamada al método!

+0

que da el nombre de la ruta física, no exactamente lo que estaba buscando. vale, bueno ... para nada. – stephenbayer

+0

Oops .... fragmento erróneo corregido ahora –

+0

genial ... mejor ... :) – stephenbayer

2

me gusta mucho la forma en que maneja este CMS pregunta lo mejor, usando las variables String.Format y Page.Request. Solo me gustaría modificarlo ligeramente. Acabo de probar en una de mis páginas, así, voy a copiar el código aquí:

String baseURL = string.Format(
    (Request.Url.Port != 80) ? "{0}://{1}:{2}" : "{0}://{1}", 
    Request.Url.Scheme, 
    Request.Url.Host, 
    Request.Url.Port) 
0

Este método se encarga HTTP/HTTPS, números de puerto y las cadenas de consulta.

'Returns current page URL 
Function fullurl() As String 
    Dim strProtocol, strHost, strPort, strurl, strQueryString As String 
    strProtocol = Request.ServerVariables("HTTPS") 
    strPort = Request.ServerVariables("SERVER_PORT") 
    strHost = Request.ServerVariables("SERVER_NAME") 
    strurl = Request.ServerVariables("url") 
    strQueryString = Request.ServerVariables("QUERY_STRING") 

    If strProtocol = "off" Then 
     strProtocol = "http://" 
    Else 
     strProtocol = "https://" 
    End If 

    If strPort <> "80" Then 
     strPort = ":" & strPort 
    Else 
     strPort = "" 
    End If 

    If strQueryString.Length > 0 Then 
     strQueryString = "?" & strQueryString 
    End If 

    Return strProtocol & strHost & strPort & strurl & strQueryString 
End Function 
0

que tuvieron que hacer frente a algo similar, que necesitaba una manera de establecer mediante programación la etiqueta para apuntar a mi raíz del sitio web.

La solución aceptada no funcionaba para mí debido a cosas de localhost y directorios virtuales.

Así que se me ocurrió la siguiente solución, funciona en localhost con o sin directorios virtuales y, por supuesto, en los sitios web de IIS.

string.Format("{0}://{1}:{2}{3}", Request.Url.Scheme, Request.Url.Host, Request.Url.Port, ResolveUrl("~") 
0

Combinando lo mejor de lo que he visto en esta cuestión hasta el momento, éste se encarga de:

  1. http y https
  2. puertos estándar (80, 443) y no estándar
  3. aplicación alojada en una subcarpeta de la raíz

    string url = String.Format(
        Request.Url.IsDefaultPort ? "{0}://{1}{3}" : "{0}://{1}:{2}{3}", 
        Request.Url.Scheme, Request.Url.Host, 
        Request.Url.Port, ResolveUrl("~/")); 
    
3

Podemos utilizar Uri y su baseURI constructor:

  • new Uri(this.Request.Url, "/") para la raíz del sitio web
  • new Uri(this.Request.Url, this.Request.ResolveUrl("~/")) para la raíz del sitio web
1

que utilizar esta propiedad en la Página de manejar casos directorios virtuales y puertos predeterminados:

string FullApplicationPath { 
    get { 
     StringBuilder sb = new StringBuilder(); 
     sb.AppendFormat("{0}://{1}", Request.Url.Scheme, Request.Url.Host); 

     if (!Request.Url.IsDefaultPort) 
      sb.AppendFormat(":{0}", Request.Url.Port); 

     if (!string.Equals("/", Request.ApplicationPath)) 
      sb.Append(Request.ApplicationPath); 

     return sb.ToString(); 
    } 
} 
Cuestiones relacionadas