Kann jemand den Unterschied zwischen Server.MapPath(".")
, Server.MapPath("~")
, Server.MapPath(@"\")
und Server.MapPath("/")
erklären?Server.MapPath ("."), Server.MapPath ("~"), Server.MapPath (@ ""), Server.MapPath ("/"). Was ist der Unterschied?
Antwort
Server.MapPath gibt den relativen oder virtuellen Pfad zum Zuordnen zu einem physischen Verzeichnis an.
Server.MapPath(".")
gibt das aktuelle physische Verzeichnis der Datei (zB aspx)Server.MapPath("..")
kehrt das übergeordnete VerzeichnisServer.MapPath("~")
kehrt der physikalische Pfad zur Wurzel derServer.MapPath("/")
Anwendung ausgeführt wird, gibt den physischen Pfad zum Stamm des Domänennamens zurück (entspricht nicht unbedingt dem Stamm der Anwendung)
Ein Beispiel:
Angenommen, Sie haben eine Website Anwendung hingewiesen (http://www.example.com/
) zu
C:\Inetpub\wwwroot
und installiert Ihre Shop-Anwendung (sub Web als virtuelle Verzeichnis in IIS, als Anwendung markiert) in
D:\WebApps\shop
Zum Beispiel, wenn Sie Server.MapPath()
in folgenden Anfrage nennen:
http://www.example.com/shop/products/GetProduct.aspx?id=2342
dann:
Server.MapPath(".")
kehrtD:\WebApps\shop\products
Server.MapPath("..")
kehrtD:\WebApps\shop
Server.MapPath("~")
kehrtD:\WebApps\shop
Server.MapPath("/")
kehrtC:\Inetpub\wwwroot
Server.MapPath("/shop")
kehren
Wenn Pfad beginnt entweder mit einem Schrägstrich (/
) oder Backslash (\
), kehrt die MapPath()
einen Pfad als ob Pfad ein vollständiger, Pfad virtuellen war.
Wenn Pfad nicht mit einem Schrägstrich beginnt, gibt MapPath()
einen Pfad relativ zum Verzeichnis der Anforderung zurück, die verarbeitet wird.
Hinweis: In C#, @
ist der wörtliche String-Operator, der bedeutet, dass die Zeichenfolge "wie sie ist" verwendet und nicht für Escape-Sequenzen verarbeitet werden soll.
Fußnoten
Server.MapPath(null)
undServer.MapPath("")
wird produce this effect too.
einfach auf die Antwort von @ splattne erweitern ein wenig:
MapPath(string virtualPath)
ruft folgendes:
public string MapPath(string virtualPath)
{
return this.MapPath(VirtualPath.CreateAllowNull(virtualPath));
}
MapPath(VirtualPath virtualPath)
wiederum ruft MapPath(VirtualPath virtualPath, VirtualPath baseVirtualDir, bool allowCrossAppMapping)
welche die folgendes enthält:
//...
if (virtualPath == null)
{
virtualPath = VirtualPath.Create(".");
}
//...
So Wenn Sie MapPath(null)
oder MapPath("")
anrufen, sind Sie eff ectively calling MapPath(".")
1) Server.MapPath (".") - Gibt das "aktuelle physische Verzeichnis" der Datei (z. aspx) ausgeführt wird.
Ex. Angenommen, D: \ WebApplications \ Collage \ Abteilungen
2) Server.MapPath ("..") - Liefert die "Parent Directory"
Ex. D: \ WebApplications \ Collage
3) Server.MapPath ("~") - Gibt den "Physical Pfad zur Wurzel der Applikation"
Ex. D: \ WebApplications \ Collage
4) Server.MapPath ("/") - Gibt den physischen Pfad zur Wurzel des Domain Name
Bsp. C: \ Inetpub \ wwwroot
Ausgezeichnet. Wir haben mit Server.Bloody.MapPath gekämpft. Danke – gbn
Sie werden besser mit 'HostingEnvironment.MapPath' umgehen, da es nicht' HttpContext' benötigt: http://stackoverflow.com/q/944219/3205 – skolima