Czy ktoś może wyjaśnić różnicę między Server.MapPath(".")
, Server.MapPath("~")
, Server.MapPath(@"\")
i Server.MapPath("/")
?
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ędnyServer.MapPath("~")
zwraca fizyczną ścieżkę do katalogu głównego aplikacjiServer.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
Server.MapPath(null)
i Server.MapPath("")
spowoduje to również ten efekt .
HostingEnvironment.MapPath
ponieważ nie wymagaHttpContext
: stackoverflow.com/q/944219/3205Wystarczy rozwinąć trochę odpowiedź @ splattne:
MapPath(string virtualPath)
wywołuje następujące:MapPath(VirtualPath virtualPath)
z kolei połączenia,MapPath(VirtualPath virtualPath, VirtualPath baseVirtualDir, bool allowCrossAppMapping)
które zawierają:Więc jeśli dzwonisz
MapPath(null)
lubMapPath("")
, skutecznie dzwoniszMapPath(".")
źródło
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 domenyDawny.
C:\Inetpub\wwwroot
źródło