Подтвердить что ты не робот

Использование 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

4b9b3361

Ответ 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"). ~/ представляет корневой каталог.