воскресенье, 31 марта 2013 г.

Server.MapPath - определение физического пути

Часто при разработке веб-приложений нам требуется определить физический путь корневого каталога или путь до файла. В этом нам поможет метод Server.MapPath.

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

Часто используемые выражения:
    Server.MapPath (".") - возвращает текущий физический каталог для файла, который выполняется (например 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 (".") - вернёт 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 вернёт путь относительно директории запроса.


Для получения MapPath в code-behind файле можно использовать  HttpContext.Current.Server.MapPath.