Server.MapPath ("."), Server.MapPath ("~"), Server.MapPath (@ "\"), Server.MapPath ("/"). В чем разница? - PullRequest
435 голосов
/ 09 ноября 2008

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

Ответы [ 3 ]

786 голосов
/ 09 ноября 2008

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

Если Path начинается с прямой косой черты (/) или обратной косой черты (\), MapPath() возвращает путь, как если бы Path был полным виртуальным путем.

Если путь не начинается с косой черты, MapPath() возвращает путь относительно каталога обрабатываемого запроса.

Примечание: в C # @ - дословный оператор строкового литерала, означающий, что строка должна использоваться "как есть" и не обрабатываться для escape-последовательностей.

Сноска

  1. Server.MapPath(null) и Server.MapPath("") будут производить этот эффект тоже .
24 голосов
/ 12 июля 2013

Просто чтобы немного расширить ответ @ 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 голосов
/ 08 января 2018

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

...