Chemins d'accès aux sites Web ASP.NET
Mise à jour : novembre 2007
Pour pouvoir utiliser des ressources dans un site Web, vous devrez souvent en spécifier le chemin d'accès. Vous pouvez, par exemple, utiliser le chemin d'accès d'une URL pour référencer le fichier image ou l'URL d'une page à un autre endroit du site Web. De même, le code de votre application Web peut utiliser le chemin d'accès physique à un fichier serveur pour lire ou écrire sur ce fichier. ASP.NET dispose des moyens de faire référence aux ressources et de déterminer les chemins d'accès aux pages ou aux autres ressources de l'application.
Spécification des chemins d'accès pour les ressources
Dans de nombreux cas, les éléments ou les contrôles de votre page doivent faire référence à des ressources externes, par exemple des fichiers. ASP.NET prend en charge différentes méthodes pour référencer des ressources externes. L'utilisation d'un élément côté client ou d'un contrôle serveur Web déterminera la méthode de référence choisie.
Éléments clients
Les éléments autres que les contrôles serveur Web d'une page (éléments clients) sont passés tels quels au navigateur. Pour faire référence à une ressource provenant d'un élément client, vous devez donc construire des chemins d'accès conformes aux règles standard des URL en HTML. Vous pouvez utiliser un chemin d'accès qualifié complet (également appelé absolu) à une URL ou divers types de chemins d'accès relatifs. Par exemple, si votre page contient un élément img, vous pouvez définir son attribut src à l'aide de l'un des chemins d'accès suivants :
Un chemin d'accès absolu à une URL. Un chemin d'accès absolu à une URL est utile pour référencer des ressources situées à un autre emplacement, par exemple un site Web externe.
<img src="https://www.contoso.com/MyApplication/Images/SampleImage.jpg" />
Un chemin d'accès relatif à la racine du site, résolu en fonction de la racine du site (et non de l'application). Les chemins d'accès relatifs à la racine du site sont utiles si vous conservez des ressources d'applications croisées, comme des images ou des fichiers de script client, dans un dossier situé sous la racine du site Web.
Cet exemple de chemin d'accès suppose qu'un dossier Images se trouve sous la racine du site Web.
<img src="/Images/SampleImage.jpg" />
Si votre site Web est https://www.contoso.com, le chemin d'accès se résoudra en fonction des éléments suivants.
https://www.contoso.com/Images/SampleImage.jpg
Un chemin d'accès relatif, résolu en fonction du chemin d'accès de la page actuelle.
<img src="Images/SampleImage.jpg" />
Un chemin d'accès relatif, résolu comme étant un homologue du chemin d'accès de la page actuelle.
<img src="../Images/SampleImage.jpg" />
Remarque : Par défaut, les navigateurs résolvent les chemins d'accès relatifs en prenant pour base l'URL de la page actuelle. Vous pouvez toutefois inclure un élément base HTML dans une page pour spécifier un autre chemin d'accès de base.
Contrôles serveur
Dans les contrôles serveur ASP.NET qui référencent des ressources, vous pouvez utiliser des chemins d'accès absolus ou relatifs de la même manière que pour les éléments clients. Si vous utilisez des chemins d'accès relatifs, ils seront résolus relativement au chemin d'accès de la page, du contrôle utilisateur ou du thème dans lequel le contrôle est contenu. Par exemple, imaginez un contrôle utilisateur situé dans un dossier Contrôles. Ce contrôle utilisateur contient un contrôle serveur Web Image dont la propriété ImageUrl a le chemin suivant : Images/SampleImage.jpg.
Lorsque le contrôle utilisateur s'exécute, le chemin d'accès se résout en : /Controls/Images/SampleImage.jpg. Cela est vrai quel que soit l'emplacement de la page qui héberge le contrôle utilisateur.
Remarque : |
---|
Dans les pages maîtres, les chemins d'accès aux ressources sont résolus à partir du chemin d'accès de la page de contenu. Pour plus d'informations, consultez Vue d'ensemble des pages maîtres ASP.NET. |
Les références à des chemins d'accès relatifs ou absolus dans un contrôle serveur présentent les inconvénients suivants :
Les chemins d'accès absolus ne peuvent pas être portés entre différentes applications. Si vous déplacez l'application vers laquelle pointe le chemin d'accès absolu, les liens sont rompus.
Les chemins d'accès relatifs dans le style des éléments clients peuvent être difficiles à gérer si vous déplacez des ressources ou des pages vers des dossiers différents.
Pour surmonter ces inconvénients, ASP.NET inclut l'opérateur racine (~) de l'application Web, qui peut servir à spécifier un chemin d'accès dans des contrôles serveur. ASP.NET résout l'opérateur ~ à la racine de l'application actuelle. Vous pouvez associer l'opérateur ~ à des dossiers pour spécifier un chemin d'accès basé sur la racine actuelle.
L'exemple suivant montre l'opérateur ~ servant à spécifier un chemin d'accès relatif à la racine pour une image lors de l'utilisation du contrôle serveur Image. Dans l'exemple, le fichier image est lu dans le dossier Images situé directement sous la racine de l'application Web, indépendamment de l'endroit où se trouve la page sur le site Web.
<asp:image id="Image1"
ImageUrl="~/Images/SampleImage.jpg" />
Vous pouvez utiliser l'opérateur ~ dans toutes les propriétés liées au chemin d'accès dans les contrôles serveur. L'opérateur ~ n'est reconnu que pour les contrôles serveur et dans le code serveur. Vous ne pouvez pas utiliser l'opérateur ~ pour les éléments clients.
Remarque : |
---|
Pour les pages mobiles uniquement, si votre application compte sur les sessions sans cookie ou peut recevoir des demandes de périphériques mobiles qui requièrent des sessions sans cookie, l'utilisation d'un tilde ("~") dans un chemin d'accès peut provoquer la création involontaire d'une session et la perte éventuelle de données de session. Pour définir une propriété sur un contrôle mobile avec un chemin d'accès qui inclut un tilde (par exemple, "~/CheminAccès"), résolvez le chemin d'accès à l'aide de la méthode ResolveUrl avant de l'assigner à la propriété. |
Détermination de chemins d'accès physiques pour le site Web actuel
Dans votre application, vous pouvez avoir à déterminer le chemin d'accès d'un fichier ou d'une autre ressource située sur le serveur. Par exemple, si votre application lit ou écrit un fichier texte par programme, vous devez fournir le chemin d'accès physique complet du fichier vers les méthodes utilisées pour lire et écrire.
Il n'est pas conseillé de coder de façon irréversible les chemins d'accès de fichiers physiques (comme C:\Website\MyApplication) dans votre application. En effet, les chemins d'accès peuvent changer si vous déplacez ou déployez votre application. Toutefois, ASP.NET vous fournit le moyen d'obtenir par programme n'importe quel chemin d'accès de fichier physique dans votre application. Vous pouvez alors utiliser le chemin d'accès de base pour créer un chemin d'accès complet à la ressource dont vous avez besoin. Les deux fonctionnalités ASP.NET les plus couramment utilisées pour déterminer un chemin d'accès sont les propriétés de l'objet HttpRequest qui retournent des informations relatives au chemin d'accès, ainsi que la méthode MapPath.
Remarque : |
---|
Les chemins d'accès de fichier physique ne doivent pas être transmis au client : ils pourraient être utilisés par un utilisateur malveillant pour obtenir des informations sur votre application. |
Détermination du chemin d'accès à partir des propriétés de la demande
Le tableau suivant répertorie les propriétés de l'objet HttpRequest qui vous aident à déterminer les chemins d'accès des ressources de votre application.
Les exemples répertoriés dans le tableau sont basés sur les hypothèses suivantes :
Une demande de navigateur a été effectuée à l'aide de l'URL suivante : https://www.contoso.com/MyApplication/MyPages/Default.aspx
Le terme « chemin d'accès virtuel » fait référence à la partie de l'URL de la demande qui suit l'identificateur du serveur ; dans ce cas, le chemin d'accès virtuel est le suivant : /MyApplication/MyPages/Default.aspx.
Le chemin d'accès physique pour la racine du site Web est le suivant : C:\inetpub\wwwroot\MyApplication\.
Le chemin d'accès physique contient un dossier nommé MyPages.
Propriété |
Description |
---|---|
Obtient le chemin d'accès racine de l'application actuelle, quel que soit l'endroit de l'application où vous le demandez. Dans l'exemple, la propriété retourne les éléments suivants : / |
|
Obtient le chemin d'accès virtuel de la demande actuelle. Diffère de la propriété FilePath en ce que CurrentExecutionFilePath est correct si la demande a été redirigée dans le code serveur. Dans l'exemple, la propriété retourne les éléments suivants : /MyApplication/MyPages/Default.aspx Si vous placez la propriété dans un code qui s'exécute à la suite d'un appel à Transfer ou Execute, le chemin d'accès reflète l'emplacement du code. |
|
Obtient le chemin d'accès virtuel de la demande actuelle. Dans l'exemple, la propriété retourne les éléments suivants : /MyApplication/MyPages/Default.aspx Contrairement à la propriété CurrentExecutionFilePath, FilePath ne reflète pas de transferts côté serveur. |
|
Obtient le chemin d'accès virtuel de la demande actuelle. Dans l'exemple, la propriété retourne les éléments suivants : /MyApplication/MyPages/default.aspx |
|
Obtient le chemin d'accès physique au système de fichiers du répertoire racine de l'application en cours d'exécution. Dans l'exemple, la propriété retourne les éléments suivants : C:\inetpub\wwwroot\ |
|
Obtient le chemin d'accès physique au système de fichiers qui correspond à l'URL demandée. Dans l'exemple, la propriété retourne les éléments suivants : C:\inetpub\wwwroot\MyApplication\MyPages\default.aspx |
Utilisation de la méthode MapPath
La méthode MapPath retourne le chemin d'accès physique complet d'un chemin d'accès virtuel que vous passez à la méthode. Par exemple, le code suivant retourne le chemin d'accès de la racine de votre site Web :
Dim rootPath As String = Server.MapPath("~")
String rootPath = Server.MapPath("~");
Remarque : |
---|
Le chemin d'accès passé à la méthode MapPath doit être un chemin d'accès relatif à l'application plutôt qu'un chemin d'accès absolu. |
Voir aussi
Concepts
Disposition des sites Web ASP.NET
Contexte de page et d'application dans les applications Web ASP.NET