Использование Server.MapPath в MVC3
У меня есть код
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
Ответы
Ответ 1
Вам нужно указать, что вы хотите начать с виртуального корня:
string xsltPath = Path.Combine(System.Web.HttpContext.Current.Server.MapPath(@"~/App_Data"), TransformFileName);
Кроме того, лучше использовать Path.Combine
для объединения путей, а не конкатенации строк. Path.Combine
убедитесь, что вы не попадете в ситуацию с разделителями двойного пути.
ИЗМЕНИТЬ
Можете ли вы определить "абсолютные" и "относительные" пути и как они сравниваются с "физическими" и "виртуальными" путями?
MSDN имеет хорошее объяснение относительно относительных, физических и виртуальных путей. Посмотрите там.
Ответ 2
Ответы, полученные до сих пор, - это то, что вы ищете, но я думаю, в вашем конкретном случае, что вам действительно нужно:
AppDomain.CurrentDomain.GetData("DataDirectory").ToString()
Это все равно вернет путь к файлу App_Data, если это имя каталога изменится в будущих версиях MVC или ASP.NET.
Ответ 3
Попробуйте сделать это (@"~/App_Data")
. ~/
представляет корневой каталог.