Использование Server.MapPath в MVC3 - PullRequest
23 голосов
/ 29 сентября 2011

У меня есть код

string xsltPath = System.Web.HttpContext.Current.Server.MapPath(@"App_Data") + "\\" + TransformFileName

Возвращает

C:\inetpub\wwwroot\websiteName\SERVICENAME\App_Data\FileName.xsl

Почему я получаю путь к ServiceController, SERVICENAME? Я хочу путь к App_Data, который находится в

C:\inetpub\wwwroot\websiteName\App_Data\FileName.xsl

Ответы [ 3 ]

57 голосов
/ 29 сентября 2011

Вам необходимо указать, что вы хотите начать с виртуального корня:

string xsltPath = Path.Combine(System.Web.HttpContext.Current.Server.MapPath(@"~/App_Data"), TransformFileName);

Кроме того, лучше использовать Path.Combine для объединения путей, а не для объединения строк. Path.Combine позаботится о том, чтобы вы не оказались в ситуации с разделителями с двумя путями.

EDIT :

Можете ли вы определить «абсолютные» и «относительные» пути и сравнить их с «физическими» и «виртуальными» путями?

MSDN имеет хорошее объяснение об относительных, физических и виртуальных путях. Взгляните туда.

6 голосов
/ 29 сентября 2011

Ответы, данные до сих пор, - это то, что вы ищете, но я думаю, что в вашем конкретном случае вам действительно нужно:

AppDomain.CurrentDomain.GetData("DataDirectory").ToString()

Это все равно вернет путь к файлу App_Dataкаталог, если это имя каталога изменится в будущих версиях MVC или ASP.NET.

0 голосов
/ 29 сентября 2011

Попробуйте сделать так (@"~/App_Data").~/ представляет корневой каталог.

...