Сервер.MapPath("."), Сервер.MapPath("~"), Сервером.MapPath(@"\"), Сервером.MapPath("/"). В чем разница?

может кто-нибудь объяснить разницу между Server.MapPath("."), Server.MapPath("~"), Server.MapPath(@"\") и Server.MapPath("/")?

3 ответов


сервер.MapPath указывает относительный или виртуальный путь к map в физический каталог.

  • Server.MapPath(".")1 возвращает текущий физический каталог исполняемого файла (например, aspx)
  • Server.MapPath("..") возвращает родительский каталог
  • Server.MapPath("~") возвращает физический путь к корню приложения
  • Server.MapPath("/") возвращает физический путь к корню доменного имени (не обязательно то же самое, что и корень приложения)

пример:

предположим, вы указали приложение веб-сайта (http://www.example.com/) к

C:\Inetpub\wwwroot

и установил приложение магазина (sub web как виртуальный каталог в 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("") будет произвести этот эффект слишком!--85-->.

просто, чтобы немного расширить ответ @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