2011-03-31 42 views
2

我有一個文件結構設置是這樣的:所謂filePage.aspx服務器根和MapPath方法()

ServerRoot 
    applicationRoot 
     filePage.aspx 
    files 
     chart.png 

我的應用程序頁面使用另一個應用程序自定義生成的圖表。我需要他們保存在文件夾中。這是我們客戶的生產服務器的設置方式,我無法改變這一點。

我做了一個_page.Server.MapPath("/files"),但它給了我一個InvalidOperationException和狀態無法映射路徑'/文件'。

UPDATE:

所以它必須建立這樣的MapPath( 「/」)。我的本地asp.net服務器無法處理MapPath,但我們的IIS開發框沒有問題,並且工作正常。有趣。 如何將它保存到文件?

回答

4

我相信在asp.net 2.0以上的虛擬目錄的目錄結構之外是違反安全性的。你需要創建一個到目錄的虛擬目錄並使用它。

+0

+1或者,在IIS中將「AspEnableParentPaths」屬性設置爲true,請參閱http://msdn.microsoft.com/zh-cn/library/ms524697%28v=vs.90%29.aspx – BrokenGlass 2011-03-31 23:13:09

0

_page.Server.MapPath()將嘗試從應用程序的根目錄(而不是服務器的根目錄)映射。

嘗試_page.Server.MapPath("../files")

編輯

想你的應用程序根目錄之外的地圖時,您可能會遇到的安全問題。如果是這樣的話,你可以這樣做:

Server.MapPath("~").Substring(0, Server.MapPath("~").IndexOf(VirtualPathUtility.ToAbsolute("~").Replace("/", "\"))) + "\files" 

這看起來相當複雜,但本質上說,「地圖我的應用程序,然後從末尾刪除應用程序根目錄,並添加‘\文件’,而不是」。

0

嘗試

_page.Server.MapPath("files") 
+0

我相信會查找他的應用程序內的文件目錄(但它在應用程序根目錄之外)。 – Ender 2011-03-31 22:53:46

+0

這仍然給我一個物理路徑C:\ applicationRoot \ files \「 – cdub 2011-03-31 22:57:01

2

使用

Server.MapPath("~/files") 

的〜表示Web應用程序的根所以返回的文件夾將是正確的無論哪個子目錄你英寸

+0

你對〜是正確的,但是它不符合他的結構。files目錄在他的應用程序的根目錄之外 – Ender 2011-03-31 22:51:20