Kann jemand den Unterschied zwischen erklären Server.MapPath(".")
, Server.MapPath("~")
, Server.MapPath(@"\")
und Server.MapPath("/")
?
Server.MapPath gibt den relativen oder virtuellen Pfad an , der einem physischen Verzeichnis zugeordnet werden soll .
Server.MapPath(".")
1 gibt das aktuelle physische Verzeichnis der ausgeführten Datei (z. B. aspx) zurückServer.MapPath("..")
Gibt das übergeordnete Verzeichnis zurückServer.MapPath("~")
Gibt den physischen Pfad zum Stammverzeichnis der Anwendung zurückServer.MapPath("/")
Gibt den physischen Pfad zum Stammverzeichnis des Domänennamens zurück (muss nicht unbedingt mit dem Stammverzeichnis der Anwendung identisch sein).Ein Beispiel:
Angenommen, Sie haben auf eine Website-Anwendung ( http://www.example.com/
) verwiesen
C:\Inetpub\wwwroot
und installierte Ihre Shop-Anwendung (Sub-Web als virtuelles Verzeichnis in IIS, als Anwendung markiert) in
D:\WebApps\shop
Zum Beispiel, wenn Sie Server.MapPath()
folgende Anfrage anrufen :
http://www.example.com/shop/products/GetProduct.aspx?id=2342
dann:
Server.MapPath(".")
1 kehrt zurückD:\WebApps\shop\products
Server.MapPath("..")
kehrt zurück D:\WebApps\shop
Server.MapPath("~")
kehrt zurück D:\WebApps\shop
Server.MapPath("/")
kehrt zurück C:\Inetpub\wwwroot
Server.MapPath("/shop")
kehrt zurück D:\WebApps\shop
Wenn Path entweder mit einem Schrägstrich ( /
) oder einem Schrägstrich ( ) beginnt \
, wird dieMapPath()
gibt der Pfad einen Pfad zurück, als wäre Path ein vollständiger virtueller Pfad.
Wenn Path nicht mit einem Schrägstrich beginnt, MapPath()
gibt der Pfad einen Pfad relativ zum Verzeichnis der verarbeiteten Anforderung zurück.
Hinweis: In C # bedeutet @
der wörtliche wörtliche Zeichenfolgenoperator, dass die Zeichenfolge "wie sie ist" verwendet und nicht für Escape-Sequenzen verarbeitet werden soll.
Fußnoten
Server.MapPath(null)
und Server.MapPath("")
wird diesen Effekt auch erzeugen .
HostingEnvironment.MapPath
da es nicht benötigtHttpContext
: stackoverflow.com/q/944219/3205Nur um die Antwort von @ splattne ein wenig zu erweitern:
MapPath(string virtualPath)
ruft folgendes auf:MapPath(VirtualPath virtualPath)
AufrufeMapPath(VirtualPath virtualPath, VirtualPath baseVirtualDir, bool allowCrossAppMapping)
, die Folgendes enthalten:Wenn Sie also anrufen
MapPath(null)
oder anrufenMapPath("")
, rufen Sie effektiv anMapPath(".")
quelle
1)
Server.MapPath(".")
- Gibt das "Aktuelle physische Verzeichnis" der Datei zurück (zaspx
. ) zurück.Ex. Annehmen
D:\WebApplications\Collage\Departments
2)
Server.MapPath("..")
- Gibt das "Elternverzeichnis" zurückEx.
D:\WebApplications\Collage
3)
Server.MapPath("~")
- Gibt den "physischen Pfad zum Stammverzeichnis der Anwendung" zurück.Ex.
D:\WebApplications\Collage
4)
Server.MapPath("/")
- Gibt den physischen Pfad zum Stammverzeichnis des Domänennamens zurückEx.
C:\Inetpub\wwwroot
quelle