Server.MapPath(“.), Server.MapPath(“~”), Server.MapPath(@“\”), Server.MapPath(“/”).В чем разница?
-
07-07-2019 - |
Вопрос
Может ли кто-нибудь объяснить разницу между 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-последовательностей.
Сноски
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