Server.MapPath („.”), Server.MapPath („~”), Server.MapPath (@ „\”), Server.MapPath („/”). Jaka jest różnica?

446

Czy ktoś może wyjaśnić różnicę między Server.MapPath("."), Server.MapPath("~"), Server.MapPath(@"\")i Server.MapPath("/")?

Manu
źródło

Odpowiedzi:

809

Server.MapPath określa ścieżkę względną lub wirtualną do odwzorowania na katalog fizyczny .

  • Server.MapPath(".")1 zwraca bieżący katalog fizyczny wykonywanego pliku (np. Aspx)
  • Server.MapPath("..") zwraca katalog nadrzędny
  • Server.MapPath("~") zwraca fizyczną ścieżkę do katalogu głównego aplikacji
  • Server.MapPath("/") zwraca fizyczną ścieżkę do katalogu głównego nazwy domeny (niekoniecznie jest taki sam jak katalog główny aplikacji)

Przykład:

Powiedzmy, że wskazałeś aplikację internetową ( http://www.example.com/) na

C:\Inetpub\wwwroot

i zainstalowałem aplikację sklepu (podsieć jako katalog wirtualny w IIS, oznaczony jako aplikacja) w

D:\WebApps\shop

Na przykład, jeśli zadzwonisz Server.MapPath()z następującym żądaniem:

http://www.example.com/shop/products/GetProduct.aspx?id=2342

następnie:

  • Server.MapPath(".")1 zwracaD:\WebApps\shop\products
  • Server.MapPath("..") zwroty D:\WebApps\shop
  • Server.MapPath("~") zwroty D:\WebApps\shop
  • Server.MapPath("/") zwroty C:\Inetpub\wwwroot
  • Server.MapPath("/shop") zwroty D:\WebApps\shop

Jeśli ścieżka zaczyna się od ukośnika do przodu ( /) lub ukośnika do tyłu ( \), MapPath()zwraca ścieżkę tak, jakby ścieżka była pełną, wirtualną ścieżką.

Jeśli ścieżka nie zaczyna się od ukośnika, MapPath()zwraca ścieżkę względem katalogu przetwarzanego żądania.

Uwaga: w języku C # @jest dosłownie dosłowny operator ciągów, co oznacza, że ​​ciąg powinien być używany „tak jak jest” i nie może być przetwarzany dla sekwencji specjalnych.

Przypisy

  1. Server.MapPath(null)i Server.MapPath("")spowoduje to również ten efekt .
splattne
źródło
44
Świetny. Walczyliśmy z Server.Bloody.MapPath. Dzięki
gbn
26
Lepiej będzie użyć, HostingEnvironment.MapPathponieważ nie wymaga HttpContext: stackoverflow.com/q/944219/3205
skolima
25

Wystarczy rozwinąć trochę odpowiedź @ splattne:

MapPath(string virtualPath) wywołuje następujące:

public string MapPath(string virtualPath)
{
    return this.MapPath(VirtualPath.CreateAllowNull(virtualPath));
}

MapPath(VirtualPath virtualPath)z kolei połączenia, MapPath(VirtualPath virtualPath, VirtualPath baseVirtualDir, bool allowCrossAppMapping)które zawierają:

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

Więc jeśli dzwonisz MapPath(null)lub MapPath(""), skutecznie dzwoniszMapPath(".")

dav_i
źródło
4

1) Server.MapPath(".")- Zwraca „bieżący katalog fizyczny” wykonywanego pliku (np. aspx).

Dawny. Przypuszczać D:\WebApplications\Collage\Departments

2) Server.MapPath("..") - Zwraca „katalog macierzysty”

Dawny. D:\WebApplications\Collage

3) Server.MapPath("~") - Zwraca „Fizyczną ścieżkę do katalogu głównego aplikacji”

Dawny. D:\WebApplications\Collage

4) Server.MapPath("/") - Zwraca fizyczną ścieżkę do katalogu głównego nazwy domeny

Dawny. C:\Inetpub\wwwroot

Vaibhav_Welcome_You
źródło