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


446

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

Réponses:


809

Server.MapPath spécifie le chemin d'accès relatif ou virtuel à 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 vers la racine du nom de domaine (n'est pas nécessairement le même que la racine de l'application)

Un exemple:

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

C:\Inetpub\wwwroot

et installé votre application de boutique (sous-Web en tant que répertoire virtuel dans IIS, marqué comme application) dans

D:\WebApps\shop

Par exemple, si vous appelez la Server.MapPath()demande suivante:

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

puis:

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

Si Path commence par une barre oblique ( /) ou une barre oblique ( \), le MapPath()renvoie un chemin d'accès comme si Path était un chemin virtuel complet.

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

Remarque: en C #, @l'opérateur de chaîne littérale textuelle 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("")va produire cet effet aussi .

44
Excellent. Nous nous battons avec Server.Bloody.MapPath. Merci
gbn

26
Vous ferez mieux d'utiliser HostingEnvironment.MapPathcar il ne nécessite pas HttpContext: stackoverflow.com/q/944219/3205
skolima

25

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

MapPath(string virtualPath) appelle:

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

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

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

Donc, si vous appelez MapPath(null)ou MapPath(""), vous appelez effectivementMapPath(".")


4

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

Ex. Supposer D:\WebApplications\Collage\Departments

2) Server.MapPath("..")- Renvoie le "répertoire parent"

Ex. D:\WebApplications\Collage

3) Server.MapPath("~")- Renvoie le "Chemin physique vers la racine de l'application"

Ex. D:\WebApplications\Collage

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

Ex. C:\Inetpub\wwwroot

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.