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

446

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

Manu
quelle

Antworten:

809

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ü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 (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

  1. Server.MapPath(null)und Server.MapPath("")wird diesen Effekt auch erzeugen .
splattne
quelle
44
Ausgezeichnet. Wir haben mit Server.Bloody.MapPath gekämpft. Danke
gbn
26
Sie werden besser dran sein, HostingEnvironment.MapPathda es nicht benötigt HttpContext: stackoverflow.com/q/944219/3205
skolima
25

Nur 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)Aufrufe MapPath(VirtualPath virtualPath, VirtualPath baseVirtualDir, bool allowCrossAppMapping), die Folgendes enthalten:

//...
if (virtualPath == null)
{
    virtualPath = VirtualPath.Create(".");
}
//...

Wenn Sie also anrufen MapPath(null)oder anrufen MapPath(""), rufen Sie effektiv anMapPath(".")

dav_i
quelle
4

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ück

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

Vaibhav_Welcomes_You
quelle