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

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

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

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

Сноски

  1. Server.MapPath(null)и Server.MapPath("")будет производить этот эффект тоже .
splattne
источник
44
Отлично. Мы боролись с Server.Bloody.MapPath. Спасибо
gbn
26
Вам будет лучше использовать, так HostingEnvironment.MapPathкак это не требуется HttpContext: stackoverflow.com/q/944219/3205
Сколима
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(".")

dav_i
источник
4

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

Vaibhav_Welcomes_You
источник