Quelqu'un peut-il expliquer la différence entre Server.MapPath(".")
, Server.MapPath("~")
, Server.MapPath(@"\")
et Server.MapPath("/")
?
Réponses
Trop de publicités?Serveur.MapPath spécifie un parent ou un chemin d'accès virtuel à la carte pour un répertoire physique.
-
Server.MapPath(".")
1 renvoie le répertoire physique du fichier (par exemple aspx) en cours d'exécution -
Server.MapPath("..")
renvoie le répertoire parent -
Server.MapPath("~")
renvoie le chemin d'accès physique à la racine de l'application -
Server.MapPath("/")
renvoie le chemin d'accès physique à la racine du nom de domaine n'est pas nécessairement la même que la racine de l'application)
Un exemple:
Disons que vous avez indiqué un site web de l'application (http://www.example.com/)
C:\Inetpub\wwwroot
et l'installation de votre boutique d'application (sous web comme répertoire virtuel dans IIS, marqué comme application)
D:\WebApps\shop
Par exemple, si vous appelez le Serveur.MapPath dans la requête suivante:
http://www.example.com/shop/products/GetProduct.aspx?id=2342
alors:
-
Server.MapPath(".")
1 renvoieD:\WebApps\shop\products
-
Server.MapPath("..")
retoursD:\WebApps\shop
-
Server.MapPath("~")
retoursD:\WebApps\shop
-
Server.MapPath("/")
retoursC:\Inetpub\wwwroot
-
Server.MapPath("/shop")
retoursD:\WebApps\shop
Si le Chemin commence par un avant (/
) ou la barre oblique inverse (\
), la méthode MapPath retourne un chemin comme si de Chemin ont été un plein, de chemin d'accès virtuel.
Si le Chemin ne commence pas par un slash, la méthode MapPath retourne un chemin relatif au répertoire de la demande en cours de traitement.
Remarque: en C#, @ est la transcription littérale de la chaîne de l'opérateur ce qui signifie que la chaîne doit être utilisé "tel quel" et ne pas être traitées pour des séquences d'échappement.
Notes de bas de page
-
Server.MapPath(null)
etServer.MapPath("")
va produire cet effet.
Juste pour élargir sur @splattne de répondre un peu:
MapPath(string virtualPath)
des appels suivants:
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 êtes effectivement en appelant MapPath(".")