Serveur.MapPath("."), Serveur.MapPath ("~ " ), Serveur.MapPath ( @ " " ), 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("/")?

418
demandé sur dav_i 2008-11-09 12:48:03

3 réponses

Serveur.MapPath spécifie le chemin relatif ou virtuel pour mapper dans un répertoire physique .

  • Server.MapPath(".")1 retourne 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 vers la racine de l'application
  • Server.MapPath("/") renvoie le chemin physique à la racine du nom de domaine (n'est pas nécessairement la même que la racine du application)

Un exemple:

Disons que vous avez pointé une application de site web (http://www.example.com/) sur

C:\Inetpub\wwwroot

Et installé votre application Boutique (sous web comme répertoire virtuel dans IIS, marqué comme 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

Puis:

  • 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 arrière (\), le MapPath() renvoie un path 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 requête en cours de traitement.

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

Notes de bas de page

  1. Server.MapPath(null) et Server.MapPath("") sera produire cet effet trop.
770
répondu splattne 2017-05-23 12:10:45

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

MapPath(string virtualPath) appelle ce qui suit:

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

MapPath(VirtualPath virtualPath) à son tour, appelle 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 l'appel de MapPath(".")

23
répondu dav_i 2013-07-12 13:49:35

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

Ex. Supposons D:\WebApplications\Collage\Departments

2) Server.MapPath("..") -- retourne le "répertoire Parent"

Ex. D:\WebApplications\Collage

3) Server.MapPath("~") -- retourne le "chemin physique vers la racine de l'Application"

Ex. D:\WebApplications\Collage

4) Server.MapPath("/") -- Renvoie le chemin d'accès physique à la racine du Nom de Domaine

Ex. C:\Inetpub\wwwroot

3
répondu Vaibhav_Welcomes_You 2018-04-28 12:23:36