Вопрос по .net, directory, c#, filepath, asp.net – Получение текущего каталога в веб-приложении .NET

91

Итак, у меня есть веб-проект, и я пытаюсь получить корневой каталог веб-сайта, используя метод c #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\

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

Связанный постhere который говорит о путях выполнения приложений .Net в целом. RBT
Еще один пост, в котором говорится оserver map paths in web applications in .Net RBT

Ваш Ответ

2   ответа
188

возвращает каталог, из которого был запущен сервер. Это не имеет ничего общего с сайтом.

Ты хочешьHttpRuntime.AppDomainAppPath.

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

@testpatternHttpContext являетсяSystem.Web.HttpContext.Current.Server.MapPath("~"), не иметьHttpRuntime
Если я использую `Server.MapPath (& quot; ~ независимо от & quot;) и сайт IIS размещается вmyserver, Я получаю C: \\ somefolder \ Что угодно, а неmyserver/Whatever папка.
Если вы не знакомы со сборками .NET (или находитесь в Immediate Window), полные командыSystem.Web.HttpRuntime.AppDomainAppPath а такжеSystem.Web.HttpRuntime.HttpContext.Server.MapPath("~")
Благодарю. Я действительно искалHttpRuntime.BinDirectory, но это было легко определить в отладчике, как только я попробовал то, что вы упомянули в своем ответе.
@ Si8: да; вот чтоServer.MapPath делает. Ты хочешьstackoverflow.com/q/5823847/34397
95

 HttpContext.Current.Server.MapPath("~")

Подробный справочник:

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

Server.MapPath(".") returns the current physical directory of the file (e.g. aspx) being executed Server.MapPath("..") returns the parent directory Server.MapPath("~") returns the physical path to the root of the application Server.MapPath("/") returns the physical path to the root of the domain name (is not necessarily the same as the root of the application)

Пример:

Допустим, вы указали приложение веб-сайта (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

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

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

Note: in C#, @ is the verbatim literal string operator meaning that the string should be used "as is" and not be processed for escape sequences.

Сноски

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

@GGO Хорошая ссылка! Перейдя по ссылкам, я стал заниматьсяSystem.Web.Hosting.HostingEnvironment.MapPath("~") вместо этого, который прекрасно работает, без зависимости отSystem.Web.HttpContext.Current
Отлично! Как раз то, что я искал ...
Идеальная копияstackoverflow.com/questions/275781/…

Похожие вопросы