Asp.net

如何使用 Server.MapPath 在 ASP.NET 中獲取網站文件夾外的位置

  • September 26, 2017

當我的 ASP.NET 站點使用文件(例如 XML)時,我通常按如下方式載入文件:

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

但是,我想將 Documents 文件夾移出網站文件夾,以便它現在是網站文件夾的兄弟。這將使文件的維護變得相當容易。

但是,重寫文件載入程式碼如下:

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

導致 ASP.NET 抱怨它不能“退出頂級目錄”。

那麼任何人都可以建議我如何相對指定網站文件夾之外的文件夾的位置嗎?出於明顯的部署原因,我真的不想指定絕對路徑。

謝謝

大衛

如果您知道它相對於您的 Web 根目錄的位置,您可以使用Server.MapPath獲取您的 Web 根目錄的物理位置,然後使用Path 類的方法來獲取您的文件路徑。

在粗略的未經檢查的程式碼中,例如:

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

對不起,如果我弄錯了語法,但是Path該類應該是您使用真正的 FS 路徑而不是 web 類型路徑所追求的。

您的方法失敗​​的原因是Server.MapPath在您的 Web 伺服器上佔用了一個位置,而您提供的那個位置無效,因為它位於伺服器層次結構根的頂部“之上”。

如果您需要在絕對或相對情況下(甚至在 Web 應用程序根文件夾之外)解析路徑,請使用以下命令:

public static class WebExtesions
{
   public static string ResolveServerPath(this HttpContextBase context, string path) {
       bool isAbsolute = System.IO.Path.IsPathRooted(path);
       string root = context.Server.MapPath("~");
       string absolutePath = isAbsolute ? 
                                   path : 
                                   Path.GetFullPath(Path.Combine(root, path));
       return absolutePath;
   }
}

引用自:https://stackoverflow.com/questions/3422270