Kann jemand den Unterschied zwischen Server.MapPath(".")
, Server.MapPath("~")
, Server.MapPath(@"\")
und Server.MapPath("/")
erklären?
Server.MapPath gibt den relativen oder virtuellen Pfad für die Zuordnung zu einem physischen Verzeichnis an .
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 (entspricht nicht unbedingt dem Stammverzeichnis der Anwendung)Ein Beispiel:
Angenommen, Sie haben auf eine Website-Anwendung (http://www.example.com/
) verwiesen
C:\Inetpub\wwwroot
und installierte Ihre Shopanwendung (Unterweb als virtuelles Verzeichnis in IIS, markiert als Anwendung) in
D:\WebApps\shop
Wenn Sie beispielsweise in der folgenden Anfrage Server.MapPath()
aufrufen:
http://www.example.com/shop/products/GetProduct.aspx?id=2342
dann:
Server.MapPath(".")
1 gibt D:\WebApps\shop\products
zurückServer.MapPath("..")
gibt D:\WebApps\shop
zurückServer.MapPath("~")
gibt D:\WebApps\shop
zurückServer.MapPath("/")
gibt C:\Inetpub\wwwroot
zurückServer.MapPath("/shop")
gibt D:\WebApps\shop
zurückWenn Path entweder mit einem Schrägstrich (/
) oder einem Schrägstrich (\
) beginnt, gibt die MapPath()
einen Pfad zurück, als wäre Path ein vollständiger virtueller Pfad.
Wenn Path 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 Zeichenfolgenoperator. Dies bedeutet, dass die Zeichenfolge unverändert verwendet und nicht für Escape-Sequenzen verarbeitet werden soll.
Fußnoten
Server.MapPath(null)
und Server.MapPath("")
werden erzeugen auch diesen Effekt .Um die Antwort von @ splattne ein wenig zu erweitern:
MapPath(string virtualPath)
ruft Folgendes auf:
public string MapPath(string virtualPath)
{
return this.MapPath(VirtualPath.CreateAllowNull(virtualPath));
}
MapPath(VirtualPath virtualPath)
ruft wiederum MapPath(VirtualPath virtualPath, VirtualPath baseVirtualDir, bool allowCrossAppMapping)
auf, das Folgendes enthält:
//...
if (virtualPath == null)
{
virtualPath = VirtualPath.Create(".");
}
//...
Wenn Sie also MapPath(null)
oder MapPath("")
aufrufen, rufen Sie tatsächlich MapPath(".")
auf.
1) Server.MapPath(".")
- Gibt das "Current Physical Directory" der ausgeführten Datei (z. B. aspx
) zurück.
Ex. Angenommen, D:\WebApplications\Collage\Departments
2) Server.MapPath("..")
- Liefert das "Parent Directory"
Ex. 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ück
Ex. C:\Inetpub\wwwroot