Server.MapPath("."), Server.MapPath("~"), Server.MapPath(@"\"), Server.MapPath("/"). В чем разница?
Может кто-нибудь объяснить разницу между Server.MapPath(".")
, Server.MapPath("~")
, Server.MapPath(@"\")
а также Server.MapPath("/")
?
4 ответа
Server.MapPath указывает относительный или виртуальный путь для сопоставления с физическим каталогом.
Server.MapPath(".")
1 возвращает текущий физический каталог исполняемого файла (например, aspx)Server.MapPath("..")
возвращает родительский каталогServer.MapPath("~")
возвращает физический путь к корню приложенияServer.MapPath("/")
возвращает физический путь к корню доменного имени (не обязательно совпадает с корнем приложения)
Пример:
Допустим, вы указали приложение веб-сайта (http://www.example.com/
) чтобы
C:\Inetpub\wwwroot
и установил приложение магазина (суб-Интернет как виртуальный каталог в IIS, помеченный как приложение) в
D:\WebApps\shop
Например, если вы звоните Server.MapPath()
в следующем запросе:
http://www.example.com/shop/products/GetProduct.aspx?id=2342
затем:
Server.MapPath(".")
1 возвратD:\WebApps\shop\products
Server.MapPath("..")
возвращаетсяD:\WebApps\shop
Server.MapPath("~")
возвращаетсяD:\WebApps\shop
Server.MapPath("/")
возвращаетсяC:\Inetpub\wwwroot
Server.MapPath("/shop")
возвращаетсяD:\WebApps\shop
Если путь начинается с косой черты (/
) или обратная косая черта (\
), MapPath()
возвращает путь, как если бы путь был полным, виртуальным путем.
Если путь не начинается с косой черты, MapPath()
возвращает путь относительно каталога обрабатываемого запроса.
Примечание: в C# @
является дословным оператором литеральной строки, означающим, что строка должна использоваться "как есть" и не обрабатываться для escape-последовательностей.
Сноски
Server.MapPath(null)
а такжеServer.MapPath("")
будет производить этот эффект тоже.
Просто чтобы немного расширить ответ @splattne:
MapPath(string virtualPath)
называет следующее:
public string MapPath(string virtualPath)
{
return this.MapPath(VirtualPath.CreateAllowNull(virtualPath));
}
MapPath(VirtualPath virtualPath)
по очереди звонки MapPath(VirtualPath virtualPath, VirtualPath baseVirtualDir, bool allowCrossAppMapping)
который содержит следующее:
//...
if (virtualPath == null)
{
virtualPath = VirtualPath.Create(".");
}
//...
Так что если вы позвоните MapPath(null)
или же MapPath("")
Вы эффективно звоните MapPath(".")
1) Server.MapPath(".")
- Возвращает "Текущий физический каталог" файла (например, aspx
) выполняется.
Ex. предполагать D:\WebApplications\Collage\Departments
2) Server.MapPath("..")
- возвращает "Родительский каталог"
Ex. D:\WebApplications\Collage
3) Server.MapPath("~")
- Возвращает "Физический путь к корню приложения"
Ex. D:\WebApplications\Collage
4) Server.MapPath("/")
- Возвращает физический путь к корню доменного имени.
Ex. C:\Inetpub\wwwroot
Рабочий пример. Надеюсь, это поможет показать способ использования MapPath не только с помощью «/». Соединяем «/» и «~».
- строка lotMapsUrl = "~/WebFS/Transport/Maps/Lots/"; --- просто поместите длинный URL в переменную
- строка lotMapsDir = Server.MapPath(lotMapsUrl); --- получить наш полный физический путь к этому местоположению
- string[] files = Directory.GetFiles(lotMapsUrl); --- иди и возьми список файлов по физическому пути.