Відповіді:
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()
повертає шлях так, ніби Path був повним віртуальним шляхом.
Якщо шлях не починається з косою рисою, MapPath()
повертає шлях відносно каталогу запиту, який обробляється.
Примітка: у C # @
- це оператор дослівної лінійної прямої строки, що означає, що рядок слід використовувати "як є", а не обробляти для послідовностей евакуації.
Виноски
Server.MapPath(null)
і Server.MapPath("")
дасть цей ефект теж .HostingEnvironment.MapPath
оскільки він не вимагає HttpContext
: stackoverflow.com/q/944219/3205
Просто для розширення відповіді на @ 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
), який виконується.
Вих. Припустимо D:\WebApplications\Collage\Departments
2) Server.MapPath("..")
- Повертає "батьківський каталог"
Вих. D:\WebApplications\Collage
3) Server.MapPath("~")
- Повертає "Фізичний шлях до кореня програми"
Вих. D:\WebApplications\Collage
4) Server.MapPath("/")
- Повертає фізичний шлях до кореня Імені домену
Вих. C:\Inetpub\wwwroot