Obtener el Path absoluto de una pagina u otro archivo en ASP.NET

Como dice Javier Luna, en algunas ocasiones, es necesario tener la ruta absoluta de una imagen o tener la ruta completa de una página aspx para un tag A (hyperlink). O en algunos otros casos es sólo por comodidad, pero alguna vez lo necesitaremos, así que lo comparto:

En el post de Javier: How to construct an absolute path, se muestra el código para lograr el cometido. Pero el pequeño inconveniente es que si estamos en producción o usando algún puerto, por ejemplo cuando usamos el modo FileSystem para almacenar nuestros sitios webs, sólo devolverá sólo http://localhost/tuarchivo.aspx, más no, http://localhost:4712/tuarchivo.aspx, en ese caso podemos usar el siguiente, que también sirve para el caso que no se tenga un puerto en la ruta:

   //retornar la ruta abosula de una rchivo
   protected string AbsolutePath(String file)
   {
      String end = (Request.ApplicationPath.EndsWith(“/”)) ? “” : “/”
      String path = Request.ApplicationPath + end;
      return String.Format(“http://{0}{1}{2}”, Request.Url.Authority, path, file);
   }

Si revisamos las propiedades de la clase Uri, encontramos a la propiedad Authority, que devuelve el nombre de host DNS (Sistema de nombres de dominio) o la dirección IP y el número de puerto de un servidor. Por cierto en el caso de que estemos en un entorno de producción no devolverá http://misitio:80/tuarchivo.aspx, sólo http://misitio/tuarchivo.aspx.

Saludos,

Post cruzado 3Dev Blogs

6 comentarios en “Obtener el Path absoluto de una pagina u otro archivo en ASP.NET”

  1. Buen punto Sergio.

    Cuando nos encontramos en un entorno de desarrollo y estamos usando File System para nuestro ASP.NET Web Application, el Visual Studio 2005 nos permitira debuggear haciendo uso de un puerto.

    En dicho escenario, la funcion AbsolutePath no nos permitira visualizar las imagenes y los enlaces estaran rotos.

    En conclusion, dicha funcion estaria limitada para entornos de produccion -que no esten asociados a un puerto- o a los HTTP Web Site en entornos de desarrollo.

  2. Yo lo resolví de la siguiente forma:
    http://” + Request.Url.Host + “:” + Request.Url.Port + HttpContext.Current.Request.ApplicationPath + “/” + ASPXFileName

    Solo basta en tu método implementar una condición que defina si se está trabajando en producción o no para subrimir el Request.Url.Port

  3. Sergio,

    Que tal así:

    string[] parts = { Request.ApplicationPath };

    parts = Request.Url.AbsoluteUri.Split(parts, StringSplitOptions.RemoveEmptyEntries);

    return parts[0] + Request.ApplicationPath + file;

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *