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

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

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

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

Ответы на вопрос(2)

Решение Вопроса

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

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

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

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

 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("") будет производить этот эффект тоже.

 09 окт. 2017 г., 17:35
Идеальная копияstackoverflow.com/questions/275781/…
 15 июн. 2018 г., 17:36
@GGO Хорошая ссылка! Перейдя по ссылкам, я стал заниматьсяSystem.Web.Hosting.HostingEnvironment.MapPath("~") вместо этого, который прекрасно работает, без зависимости отSystem.Web.HttpContext.Current
 05 окт. 2016 г., 14:10
Отлично! Как раз то, что я искал ...

Ваш ответ на вопрос