2010-08-06 27 views
11

獲得網站文件夾外的位置,當我的ASP.NET網站使用的文件(如XML),我通常如下加載文檔:如何使用在使用Server.Mappath ASP.NET

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

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

然而,重寫文件負載代碼如下:

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

導致從ASP.NET,它不能「退出頂層目錄」上方投訴。

所以任何人都可以建議我如何才能相對地指定網站文件夾以外的文件夾的位置?我真的不想爲明顯的部署原因指定絕對路徑。

感謝

大衛

回答

25

如果你知道它是相對於你的Web根目錄,你可以使用Server.MapPath讓你的Web根目錄的物理位置,然後Path class的方法,讓您的文檔路徑。

在粗糙選中的代碼是這樣的:如果

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

對不起我的語法錯誤,但Path類應該是你是什麼後,與真正的FS路徑,而不是網絡型路徑發揮。

您的方法失敗的原因是Server.MapPath在您的Web服務器上獲取一個位置,並且您提供的位置無效,因爲它位於服務器層次結構根目錄的頂部「之上」。

+0

是。那看起來像那個。 – David 2010-08-06 10:16:58

+1

可能更好的是將Documents文件夾作爲虛擬目錄添加到IIS中的網站。 – David 2010-08-06 10:27:59

+0

你可以做到這一點。這實際上取決於用戶是否需要訪問這些文檔(或者您是否希望他們)。如果沒有必要下載它們,那麼就沒有必要將它們作爲虛擬目錄。你當然可以用其他方式來保護它們(拒絕目錄上的權限等),但沒有關聯的url總是最好的保護方式。我不'真的知道你的用法是什麼,但不知道這個Documents目錄是什麼,我不想說什麼是最好的行爲方式(和它的probabyl無論如何都是一個單獨的問題)。 :) – Chris 2010-08-06 10:31:57

0

如果你想在某個硬盤指定位置,那麼它是不容易得到的網絡環境。如果文件的大小和數量較小,則可以將其保存在目錄中,然後使用〜/ path直到目錄。

但在某些情況下,我們用來做Request對象。欲瞭解更多請訪問此鏈接

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

5
docPath = System.IO.Path.Combine(AppDomain.CurrentDomain.BaseDirectory, @"..\Documents\MyDocument.xml"); 

AppDomain.BaseDirectory返回當前Web應用程序的程序集目錄路徑。

1

如果您需要解決在這兩種情況下的道路絕對或相對(甚至是外面的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; 
    } 
} 
+0

@cleftherus爲什麼你需要在''這個HttpContextBase上下文'中的'this'? – Chopo87 2013-06-24 12:11:05

+1

@ Chopo87在我的情況下,我正在使用HttpContextBase的子類HttpContextWrapper類(Asp.Net MVC)。你可以改變擴展方法來取代HttpContext。 – cleftheris 2013-06-24 13:06:22

+0

@cleftherus謝謝,我會爲我的情況''HttpContext' – Chopo87 2013-06-24 13:17:14