Server.MapPath ("."), Server.MapPath ("~"), Server.MapPath (@ "\"), Server.MapPath ("/"). Яка різниця?


Відповіді:


809

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 # @- це оператор дослівної лінійної прямої строки, що означає, що рядок слід використовувати "як є", а не обробляти для послідовностей евакуації.

Виноски

  1. Server.MapPath(null)і Server.MapPath("")дасть цей ефект теж .

44
Відмінно. Ми боролися з Server.Bloody.MapPath. Спасибі
gbn

26
Ви будете краще використовувати , HostingEnvironment.MapPathоскільки він не вимагає HttpContext: stackoverflow.com/q/944219/3205
skolima

25

Просто для розширення відповіді на @ 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(".")


4

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

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.