web-dev-qa-db-fra.com

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

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

437
Manu

Server.MapPath spécifie le chemin relatif ou virtuel permettant de mapper vers un répertoire physique .

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

Un exemple:

Supposons que vous ayez dirigé une application de site Web (http://www.example.com/) vers

C:\Inetpub\wwwroot

et installé votre application de magasin (sous-site Web en tant que répertoire virtuel dans IIS, marqué en tant qu’application) dans

D:\WebApps\shop

Par exemple, si vous appelez Server.MapPath() dans la requête suivante:

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

ensuite:

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

Si Path commence par une barre oblique (/) ou une barre oblique inversée (\), le MapPath() renvoie un chemin comme s'il était un chemin virtuel complet.

Si Path ne commence pas par une barre oblique, MapPath() renvoie un chemin relatif au répertoire de la demande en cours de traitement.

Remarque: en C #, @ est l'opérateur de chaîne littérale mot à mot qui signifie que la chaîne doit être utilisée "telle quelle" et ne pas être traitée pour les séquences d'échappement.

Notes de bas de page

  1. Server.MapPath(null) et Server.MapPath("") vont produire cet effet aussi .
790
splattne

Juste pour développer un peu la réponse de @ splattne:

MapPath(string virtualPath) appelle le suivant:

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 appelez effectivement MapPath(".")

24
dav_i

1) Server.MapPath(".") - Retourne le "Répertoire physique actuel" du fichier en cours d’exécution (par exemple aspx).

Ex. Supposons que D:\WebApplications\Collage\Departments

2) Server.MapPath("..") - Retourne le "Répertoire parent"

Ex. D:\WebApplications\Collage

3) Server.MapPath("~") - Retourne le "chemin physique à la racine de l'application"

Ex. D:\WebApplications\Collage

4) Server.MapPath("/") - Retourne le chemin physique à la racine du nom de domaine

Ex. C:\Inetpub\wwwroot

4