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-последовательностей.

Сноски

  1. 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 не только с помощью «/». Соединяем «/» и «~».

  1. строка lotMapsUrl = "~/WebFS/Transport/Maps/Lots/"; --- просто поместите длинный URL в переменную
  2. строка lotMapsDir = Server.MapPath(lotMapsUrl); --- получить наш полный физический путь к этому местоположению
  3. string[] files = Directory.GetFiles(lotMapsUrl); --- иди и возьми список файлов по физическому пути.
Другие вопросы по тегам