456 votes

Serveur.MapPath("."), Serveur.MapPath("~"), À Un Serveur.MapPath(@"\"), À Un Serveur.MapPath("/"). Quelle est la différence?

Quelqu'un peut-il expliquer la différence entre Server.MapPath("."), Server.MapPath("~"), Server.MapPath(@"\") et Server.MapPath("/")?

822voto

splattne Points 48126

Serveur.MapPath spécifie un parent ou un chemin d'accès virtuel à la carte pour un répertoire physique.

  • Server.MapPath(".")1 renvoie le répertoire physique du fichier (par exemple aspx) en cours d'exécution
  • Server.MapPath("..") renvoie le répertoire parent
  • Server.MapPath("~") renvoie le chemin d'accès physique à la racine de l'application
  • Server.MapPath("/") renvoie le chemin d'accès physique à la racine du nom de domaine n'est pas nécessairement la même que la racine de l'application)

Un exemple:

Disons que vous avez indiqué un site web de l'application (http://www.example.com/)

C:\Inetpub\wwwroot

et l'installation de votre boutique d'application (sous web comme répertoire virtuel dans IIS, marqué comme application)

D:\WebApps\shop

Par exemple, si vous appelez le Serveur.MapPath dans la requête suivante:

http://www.example.com/shop/products/GetProduct.aspx?id=2342

alors:

  • Server.MapPath(".")1 renvoie D:\WebApps\shop\products
  • Server.MapPath("..") retours D:\WebApps\shop
  • Server.MapPath("~") retours D:\WebApps\shop
  • Server.MapPath("/") retours C:\Inetpub\wwwroot
  • Server.MapPath("/shop") retours D:\WebApps\shop

Si le Chemin commence par un avant (/) ou la barre oblique inverse (\), la méthode MapPath retourne un chemin comme si de Chemin ont été un plein, de chemin d'accès virtuel.

Si le Chemin ne commence pas par un slash, la méthode MapPath retourne un chemin relatif au répertoire de la demande en cours de traitement.

Remarque: en C#, @ est la transcription littérale de la chaîne de l'opérateur ce qui signifie que la chaîne doit être utilisé "tel quel" et ne pas être traitées pour des séquences d'échappement.

Notes de bas de page

  1. Server.MapPath(null) et Server.MapPath("") va produire cet effet.

24voto

dav_i Points 6206

Juste pour élargir sur @splattne de répondre un peu:

MapPath(string virtualPath) des appels suivants:

public string MapPath(string virtualPath)
{
    return this.MapPath(VirtualPath.CreateAllowNull(virtualPath));
}

MapPath(VirtualPath virtualPath) appelle à son tour MapPath(VirtualPath virtualPath, VirtualPath baseVirtualDir, bool allowCrossAppMapping) qui contient les éléments suivants:

//...
if (virtualPath == null)
{
    virtualPath = VirtualPath.Create(".");
}
//...

Donc, si vous appelez MapPath(null) ou MapPath(""), vous êtes effectivement en appelant MapPath(".")

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X