Réponses:
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écutionServer.MapPath("..")
renvoie le répertoire parentServer.MapPath("~")
renvoie le chemin physique à la racine de l'applicationServer.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
Server.MapPath(null)
et Server.MapPath("")
va produire cet effet aussi .HostingEnvironment.MapPath
car il ne nécessite pas HttpContext
: stackoverflow.com/q/944219/3205
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(".")
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