Server.MapPath(“.), Server.MapPath(“~”), Server.MapPath(@“\”), Server.MapPath(“/”).В чем разница?

StackOverflow https://stackoverflow.com/questions/275781

Вопрос

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

Это было полезно?

Решение

Сервер.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() возвращает путь относительно каталога обрабатываемого запроса.

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

Сноски

  1. Server.MapPath(null) и Server.MapPath("") воля тоже произвести такой эффект.

Другие советы

Просто чтобы немного расширить ответ @ splattne:

MapPath (строка 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) выполняется.

Бывший.Предполагать D:\WebApplications\Collage\Departments

2) Server.MapPath("..") -- Возвращает «Родительский каталог»

Бывший. D:\WebApplications\Collage

3) Server.MapPath("~") -- Возвращает «Физический путь к корню приложения»

Бывший. D:\WebApplications\Collage

4) Server.MapPath("/") -- Возвращает физический путь к корню доменного имени.

Бывший. C:\Inetpub\wwwroot

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top