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("/")?

Manu
la source

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 .
splattne
la source
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(".")

dav_i
la source
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

Vaibhav_Welcome_You
la source