Как использовать Сервер. MapPath для получения местоположения вне папки веб-сайта в ASP.NET

Когда мой сайт ASP.NET использует документы (например, XML), я обычно загружаю документ следующим образом:

Server.MapPath("~\Documents\MyDocument.xml")

Однако я хотел бы переместить папку Documents из папки веб-сайта так, чтобы это был теперь одноуровневый элемент папки веб-сайта. Это сделает поддержание документов значительно легче.

Однако перезапись документа загружает код следующим образом:

Server.MapPath("../../Documents/MyDocument.xml")

результаты в жалобе от ASP.NET, что это не может 'выйти выше главного каталога'.

Таким образом, кто-либо может предложить, как я могу относительно указать местоположение папки вне папки веб-сайта? Я действительно не хочу указывать полные пути по очевидным причинам развертывания.

Спасибо

David

12
задан David 6 August 2010 в 08:53
поделиться

3 ответа

Если вы знаете, где он находится относительно вашего веб-корня, вы можете использовать Server.MapPath , чтобы получить физическое расположение вашего веб-корня, а затем метод Path class для получения вашего документа дорожка.

В грубом непроверенном коде что-то вроде:

webRootPath = Server.MapPath("~")
docPath = Path.GetFullPath(Path.Combine(rootPath, "../Documents/MyDocument.xml"))

Извините, если я ошибся в синтаксисе, но класс Path должен быть тем, что вам нужно, чтобы играть с реальными путями FS, а не с путями веб-типа.

Причина, по которой ваш метод не удался, заключается в том, что Server.MapPath занимает местоположение на вашем веб-сервере, а тот, который вы указали, недействителен, так как он находится «выше» вершины корня иерархии серверов. .

27
ответ дан 2 December 2019 в 04:32
поделиться

Если вы хотите указать Местоположение где-нибудь на жестком диске, то его нелегко получить в веб-среде. Если файлы меньше по размеру и количеству, вы можете сохранить их внутри каталога и указать, затем, используя ~ / path до каталога.

Но в некоторых случаях мы использовали объект Request. Для получения дополнительной информации посетите эту ссылку

http://msdn.microsoft.com/en-us/library/5d5940ad.aspx

0
ответ дан 2 December 2019 в 04:32
поделиться
docPath = System.IO.Path.Combine(AppDomain.CurrentDomain.BaseDirectory, @"..\Documents\MyDocument.xml");

AppDomain.BaseDirectory возвращает текущий путь к директории сборки веб-приложения.

5
ответ дан 2 December 2019 в 04:32
поделиться
Другие вопросы по тегам:

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