Когда мой сайт ASP.NET использует документы (например, XML), я обычно загружаю документ следующим образом:
Server.MapPath("~\Documents\MyDocument.xml")
Однако я хотел бы переместить папку Documents из папки веб-сайта так, чтобы это был теперь одноуровневый элемент папки веб-сайта. Это сделает поддержание документов значительно легче.
Однако перезапись документа загружает код следующим образом:
Server.MapPath("../../Documents/MyDocument.xml")
результаты в жалобе от ASP.NET, что это не может 'выйти выше главного каталога'.
Таким образом, кто-либо может предложить, как я могу относительно указать местоположение папки вне папки веб-сайта? Я действительно не хочу указывать полные пути по очевидным причинам развертывания.
Спасибо
David
Если вы знаете, где он находится относительно вашего веб-корня, вы можете использовать Server.MapPath
, чтобы получить физическое расположение вашего веб-корня, а затем метод Path class для получения вашего документа дорожка.
В грубом непроверенном коде что-то вроде:
webRootPath = Server.MapPath("~")
docPath = Path.GetFullPath(Path.Combine(rootPath, "../Documents/MyDocument.xml"))
Извините, если я ошибся в синтаксисе, но класс Path
должен быть тем, что вам нужно, чтобы играть с реальными путями FS, а не с путями веб-типа.
Причина, по которой ваш метод не удался, заключается в том, что Server.MapPath
занимает местоположение на вашем веб-сервере, а тот, который вы указали, недействителен, так как он находится «выше» вершины корня иерархии серверов. .
Если вы хотите указать Местоположение где-нибудь на жестком диске, то его нелегко получить в веб-среде. Если файлы меньше по размеру и количеству, вы можете сохранить их внутри каталога и указать, затем, используя ~ / path до каталога.
Но в некоторых случаях мы использовали объект Request. Для получения дополнительной информации посетите эту ссылку
docPath = System.IO.Path.Combine(AppDomain.CurrentDomain.BaseDirectory, @"..\Documents\MyDocument.xml");
AppDomain.BaseDirectory возвращает текущий путь к директории сборки веб-приложения.