Получение текущего каталога в веб-приложении .NET

Итак, у меня есть веб-проект, и я пытаюсь получить корневую директорию веб-сайта с помощью метода С# Directory.GetCurrentDirectory(). Я не хочу использовать статический путь, поскольку расположение файлов будет меняться в будущем. Этот метод работает в моем файле imageProcess.aspx.cs, но там, где я думал, что он вернется:

C:\Users\tcbl\documents\visual studio 2010\Projects\ModelMonitoring\ModelMonitoring\imageProcess.aspx.cs

Я получаю:

C:\Program Files\Common Files\Microsoft Shared\DevServer\10.0\

Может ли кто-нибудь объяснить, почему это происходит и каково возможное решение? Большое спасибо.

Ответ 1

Текущий каталог представляет собой системный уровень; он возвращает каталог, из которого был запущен сервер. Это не имеет никакого отношения к веб-сайту.

Вы хотите HttpRuntime.AppDomainAppPath.

Если вы используете HTTP-запрос, вы также можете вызвать Server.MapPath("~/Whatever").

Ответ 2

Используйте этот код:

 HttpContext.Current.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(".") returns D:\WebApps\shop\products
Server.MapPath("..") returns D:\WebApps\shop
Server.MapPath("~") returns D:\WebApps\shop
Server.MapPath("/") returns C:\Inetpub\wwwroot
Server.MapPath("/shop") returns D:\WebApps\shop

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

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

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

Сноска

Server.MapPath(null) и Server.MapPath("") тоже произведут этот эффект.