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("/")
?
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 retourneD:\WebApps\shop\products
-
Server.MapPath("..")
renvoieD:\WebApps\shop
-
Server.MapPath("~")
renvoieD:\WebApps\shop
-
Server.MapPath("/")
renvoieC:\Inetpub\wwwroot
-
Server.MapPath("/shop")
renvoieD:\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
-
Server.MapPath(null)
etServer.MapPath("")
sera produire cet effet trop.
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(".")
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