Pregunta

¿Cómo puedo obtener de manera consistente la URL base o raíz absoluta y completa del sitio, independientemente de si el sitio está en un directorio virtual y de dónde se encuentra mi código en la estructura del directorio?Probé todas las variables y funciones que se me ocurrieron y no encontré una buena manera.

Quiero poder obtener la URL del sitio actual, es decir. http://www.ejemplo.com o si es un directorio virtual, http://www.ejemplo.com/DNN/


Estas son algunas de las cosas que he probado y el resultado.El único que incluye toda la pieza que quiero (http://localhost:4471/DNN441) es Solicitud.URI.AbsolutaURI:

  • Solicitud.RutaFísica:C:\Sitios web\DNN441\Default.aspx
  • Solicitud.ApplicationPath:/DNN441
  • Solicitud.PhysicalApplicationPath:C:\Sitios web\DNN441\
  • Ruta del mapa:C:\WebSites\DNN441\DesktopModules\Articles emplates\Default.aspx
  • URL sin formato:/DNN441/ModuleTesting/Articles/tabid/56/ctl/Details/mid/374/ItemID/1/Default.aspx
  • Solicitud.Url.AbsoluteUri: http://localhost:4471/DNN441/Default.aspx
  • Solicitud.Url.RutaAbsoluta:/DNN441/Default.aspx
  • Solicitud.Url.RutaLocal:/DNN441/Default.aspx Solicitud.Url.Host:servidor local
  • Solicitud.Url.PathAndQuery:/DNN441/Default.aspx?TabId=56&ctl=Detalles&mid=374&ItemID=1
¿Fue útil?

Solución

Al leer la respuesta proporcionada en el blog de Rick Strahl, descubrí que lo que realmente necesitaba era bastante simple.Primero necesitas determinar la ruta relativa (que para mí fue la parte fácil) y pasarla a la función definida a continuación:

VB.NET

Public Shared Function GetFullyQualifiedURL(ByVal s as string) As String
   Dim Result as URI = New URI(HttpContext.Current.Request.Url, s)
   Return Result.ToString
End Function

C#

public static string GetFullyQualifiedURL(string s) {
    Uri Result = new Uri(HttpContext.Current.Request.Url, s);
    return Result.ToString();
}

Otros consejos

La respuesta aceptada supone que la solicitud actual ya está en el servidor/raíz virtual.Prueba esto:

Request.Url.GetLeftPart(UriPartial.Authority) + Request.ApplicationPath

Hay excelentes debates e ideas sobre El blog de Rick Strahl.

EDITAR:Debo agregar que las ideas funcionan con o sin un HttpContext válido.

EDITAR2:Aquí esta la comentario/código específico en esa publicación que responde a la pregunta

Encontró este código aquí:

string appPath = null;

appPath = string.Format("{0}://{1}{2}{3}",
    Request.Url.Scheme,
    Request.Url.Host,
    Request.Url.Port == 80 ? string.Empty : ":" + Request.Url.Port,
    Request.ApplicationPath);

¿Has probado AppSettings.RootUrl que normalmente se configura en el archivo web.config?

¿Estás hablando de uso como enlaces?

si es así, entonces haciendo esto <a href='/'>goes to root</a> Lo llevará al archivo predeterminado de la raíz web.

Ahora, para el lado del cliente, pasar "~/" al método Control::ResolveUrl le proporcionará lo que está buscando.(http://msdn.microsoft.com/en-us/library/system.web.ui.control.resolveurl.aspx)

No tengo forma de validar esto en este momento, pero ¿ha probado "Request.Url.AbsoluteUri" desde otra máquina?

Se me ocurre que, en lo que respecta a su máquina, su navegador realiza una solicitud desde localhost.

Sin embargo, podría estar equivocado, pero creo que la solicitud es relativa al navegador y no al servidor web.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top