Rutas de acceso a sitios Web ASP.NET

Actualización: noviembre 2007

Al trabajar con recursos en un sitio Web, es necesario especificar a menudo una ruta de acceso para el recurso. Por ejemplo, podría utilizar una ruta URL para hacer referencia a un archivo de imagen en una página o a la dirección URL de una página que se encuentre en otro lugar del sitio Web. De forma similar, el código de su aplicación Web podría utilizar una ruta de acceso física a un archivo ubicado en el servidor para leer o escribir dicho archivo. ASP.NET proporciona los medios para hacer referencia a los recursos y determinar las rutas de acceso de páginas u otros recursos de la aplicación.

Especificar las rutas de acceso para los recursos

En muchos casos, los elementos o los controles de su página deben hacer referencia a un recurso externo, como un archivo. ASP.NET permite hacer referencia a recursos externos de distintas maneras. La manera que elija dependerá de si está trabajando con un elemento de cliente o con un control de servidor.

Elementos de cliente

Los elementos que no son controles de servidor en una página (los elementos de cliente), se pasan tal como están al explorador. Por consiguiente, al hacer referencia a un recurso desde un elemento de cliente, se construyen las rutas de acceso según las reglas estándar para las direcciones URL en HTML. Puede utilizar una ruta de acceso de dirección URL completa (absoluta) o varios tipos de rutas de acceso relativas. Por ejemplo, si su página contiene una etiqueta img, puede establecer su atributo src utilizando una de las siguientes rutas de acceso:

  • Una ruta de acceso de dirección URL absoluta:

    <img src="https://www.contoso.com/MyApplication/Images/SampleImage.jpg" />
    

    Una ruta de acceso de dirección URL absoluta es útil si se hace referencia a recursos en otra ubicación, como un sitio Web externo.

  • Una ruta de acceso relativa a la de raíz del sitio, que se resuelve a partir de la raíz del sitio (no de la aplicación). Este ejemplo de ruta de acceso presupone la existencia de una carpeta denominada Images bajo la raíz del sitio Web:

    <img src="/Images/SampleImage.jpg" />
    

    Si su sitio Web es https://www.contoso.com, la ruta de acceso se resolvería de la forma siguiente:

    https://www.contoso.com/Images/SampleImage.jpg
    

    Las rutas de acceso relativas a la raíz del sitio son útiles si dispone de recursos compartidos por varias aplicaciones, como imágenes o archivos de secuencia de comandos del cliente, en una carpeta bajo la raíz del sitio Web.

  • Una ruta de acceso relativa que se resuelve a partir de la ruta de acceso de la página actual:

    <img src="Images/SampleImage.jpg" />
    
  • Una ruta de acceso relativa que se resuelve como homóloga de la ruta de acceso de la página actual.

    <img src="../Images/SampleImage.jpg" />
    
    Nota:

    De forma predeterminada, los exploradores resuelven las rutas de acceso relativas utilizando la dirección URL de la página actual como base. Sin embargo, puede incluir un elemento base de HTML en una página para especificar como base una ruta de acceso alternativa.

Controles de servidor

En los controles de servidor ASP.NET que hacen referencia a recursos, puede utilizar rutas de acceso absolutas o relativas de la misma manera que en los elementos de cliente. Si utiliza rutas de acceso relativas, éstas se resuelven con relación a la ruta de acceso de la página, del control de usuario o del tema en el que está incluido el control. Por ejemplo, imagine que tiene un control de usuario en una carpeta denominada Controls. Dicho control contiene un control de servidor Web Image cuya propiedad ImageUrl se establece en la ruta de acceso siguiente:

Images/SampleImage.jpg

Cuando se ejecute el control de usuario, la ruta de acceso se resolverá de la manera siguiente:

/Controls/Images/SampleImage.jpg

Esto ocurre independientemente de la ubicación de la página que aloja el control de usuario.

Las referencias a rutas de acceso absolutas y relativas en un control de servidor tienen las desventajas siguientes:

  • Las rutas de acceso absolutas no son portables entre aplicaciones. Si mueve la aplicación a la que señala la ruta de acceso absoluta, los vínculos dejarán de funcionar.

  • Las rutas de acceso relativas al estilo de elementos de cliente pueden ser difíciles de mantener si se mueven recursos o páginas a carpetas diferentes.

Para superar estas desventajas, ASP.NET proporciona el operador raíz de aplicación Web (~), que se puede utilizar al especificar una ruta de acceso en los controles de servidor. ASP.NET resuelve el operador ~ como la raíz de la aplicación actual. Puede utilizar el operador ~ junto con carpetas para especificar una ruta de acceso que esté basada en la raíz actual. En los ejemplos siguientes se muestra el uso del operador ~ para especificar rutas de acceso relativas a la raíz para una imagen al utilizar el control de servidor Image:

<asp:image  id="Image1"
  ImageUrl="~/Images/SampleImage.jpg" />

En el ejemplo, el archivo de imagen se leerá en la carpeta Images situada directamente bajo la raíz de la aplicación Web, independientemente del lugar del sitio Web en el que esté ubicada la página.

Nota:

El operador ~ sólo se reconoce en los controles de servidor y en el código de servidor. No se puede utilizar el operador ~ en los elementos de cliente.

Puede utilizar el operador ~ en cualquier propiedad relacionada con las rutas de acceso en los controles de servidor.

Nota:

En las páginas maestras, las rutas de acceso a los recursos se resuelven basándose en la ruta de acceso de la página de contenido. Para obtener más información, vea Información general sobre las páginas principales ASP.NET.

Determinar las rutas de acceso físicas a los archivos para el sitio Web actual

Es posible que necesite determinar en su aplicación la ruta de acceso de un archivo o de otro recurso ubicado en el servidor. Por ejemplo, si la aplicación lee o escribe un archivo de texto mediante programación, debe proporcionar la ruta de acceso física completa del archivo a los métodos utilizados para lectura y escritura.

No es aconsejable asignar rutas de acceso físicas a los archivos codificadas de forma rígida (por ejemplo C:\Website\MiAplicación) en la aplicación, ya que las rutas de acceso pueden cambiar si se mueve o se distribuye la aplicación. Sin embargo, ASP.NET proporciona varias maneras de obtener cualquier ruta de acceso física de los archivos dentro de una aplicación mediante programación. Puede utilizar la ruta de acceso base de los archivos para crear una ruta de acceso completa al recurso que necesite. Las dos características de ASP.NET que se utilizan con más frecuencia para determinar una ruta de acceso de archivo son las propiedades del objeto HttpRequest, que devuelven información sobre rutas de acceso, y el método MapPath.

Nota:

Las rutas de acceso físicas de los archivos no se deberían enviar al cliente debido a que pueden ser utilizadas por un usuario malintencionado para obtener información sobre la aplicación.

Determinar la ruta de acceso a partir de las propiedades de la solicitud

En la tabla siguiente se muestran las propiedades del objeto HttpRequest que le ayudarán a determinar las rutas de acceso de los recursos de su aplicación.

En los ejemplos se asume que se realizó una solicitud del explorador mediante la dirección URL siguiente:

https://www.contoso.com/MyApplication/MyPages/Default.aspx

En estos ejemplos, el término "ruta de acceso virtual" hace referencia a la parte de la dirección URL de la solicitud que va a continuación del identificador de servidor; en este caso, la ruta de acceso virtual es la siguiente:

/MyApplication/MyPages/Default.aspx

Además, en los ejemplos se asume que la ruta de acceso física para la raíz del sitio Web es la siguiente:

C:\inetpub\wwwroot\MyApplication\

Por último, en los ejemplos se asume que la ruta de acceso física contiene una carpeta denominada MyPages.

Propiedad

Descripción

ApplicationPath

Obtiene la ruta de acceso raíz de la aplicación actual, sin tener en cuenta en qué parte de la aplicación se solicita. En el ejemplo, la propiedad devuelve lo siguiente:

/

CurrentExecutionFilePath

Obtiene la ruta de acceso virtual de la solicitud actual. Se diferencia de FilePath en que el valor de CurrentExecutionFilePath es correcto si la solicitud se ha redirigido en el código de servidor. En el ejemplo, la propiedad devuelve lo siguiente:

/MyApplication/MyPages/Default.aspx

Si obtiene la propiedad en el código que se está ejecutando como resultado de una llamada a Transfer o Execute, la ruta de acceso refleja la ubicación del código.

FilePath

Obtiene la ruta de acceso virtual de la solicitud actual. En el ejemplo, la propiedad devuelve lo siguiente:

/MyApplication/MyPages/Default.aspx

Al contrario que CurrentExecutionFilePath, FilePath no refleja las transferencias del servidor.

Path

Obtiene la ruta de acceso virtual de la solicitud actual. En el ejemplo, la propiedad devuelve lo siguiente:

/MyApplication/MyPages/default.aspx

PhysicalApplicationPath

Obtiene la ruta de acceso física al sistema de archivos del directorio raíz de la aplicación que se está ejecutando actualmente. En el ejemplo, la propiedad devuelve lo siguiente:

C:\inetpub\wwwroot\

PhysicalPath

Obtiene la ruta de acceso física al sistema de archivos correspondiente a la dirección URL solicitada. En el ejemplo, la propiedad devuelve lo siguiente:

C:\inetpub\wwwroot\MyApplication\MyPages\default.aspx

Utilizar el método MapPath

El método MapPath devuelve la ruta de acceso física completa correspondiente a la ruta de acceso virtual pasada al método. Por ejemplo, el código siguiente devuelve la ruta de acceso del archivo para la raíz de su sitio Web:

Dim rootPath As String = Server.MapPath("~")
String rootPath = Server.MapPath("~");
Nota:

La ruta de acceso pasada al método MapPath debe ser una ruta relativa a la aplicación en lugar de una ruta absoluta.

Vea también

Conceptos

Diseño de sitios Web ASP.NET

Contexto de página y aplicación en aplicaciones Web ASP.NET