wake-up-neo.com

Server.MapPath ("."), Server.MapPath ("~"), Server.MapPath (@ "\"), Server.MapPath ("/"). Was ist der Unterschied?

Kann jemand den Unterschied zwischen Server.MapPath("."), Server.MapPath("~"), Server.MapPath(@"\") und Server.MapPath("/") erklären?

437
Manu

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ück
  • Server.MapPath("..") gibt das übergeordnete Verzeichnis zurück
  • Server.MapPath("~") gibt den physischen Pfad zum Stammverzeichnis der Anwendung zurück
  • Server.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ück
  • Server.MapPath("..") gibt D:\WebApps\shop zurück
  • Server.MapPath("~") gibt D:\WebApps\shop zurück
  • Server.MapPath("/") gibt C:\Inetpub\wwwroot zurück
  • Server.MapPath("/shop") gibt D:\WebApps\shop zurück

Wenn 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

  1. Server.MapPath(null) und Server.MapPath("") werden erzeugen auch diesen Effekt .
790
splattne

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.

24
dav_i

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