2011-05-21 178 views
36

如何從asp.net物理路徑獲取相對虛擬路徑? 相反的方法是象下面這樣:從物理路徑獲取相對虛擬路徑

Server.MapPath("Virtual Path Here"); 

但什麼是方法上的反向?

+8

考慮到IIS中的多個虛擬目錄可能映射到相同的物理目錄,即使在單個應用程序中也是如此。那麼如何回答這個問題呢? – 2011-05-21 13:09:05

回答

32

也許this question是你在找什麼。 在那裏,他們建議:

String RelativePath = AbsolutePath.Replace(Request.ServerVariables["APPL_PHYSICAL_PATH"], String.Empty); 
22
public static string MapPathReverse(string fullServerPath) 
    {    
     return @"~\" + fullServerPath.Replace(HttpContext.Current.Request.PhysicalApplicationPath,String.Empty); 
    } 
+0

這適用,但在我的情況下,由於某種原因PhysicalApplicationPath是小寫的,但我的fullServerPath中的路徑即使從文件系統讀取也不是。由於Windows沒有區分大小寫的路徑,所以將其全部轉換爲小寫可能沒有問題 – 2017-01-12 08:04:24

8

你也可以做這樣的事情:

string relativePath = absolutePath.Replace(HttpContext.Current.Server.MapPath("~/"), "~/").Replace(@"\", "/"); 

的好處是,你不需要HttpContext.Current.Request

+0

這實際上是一個更好的答案,因爲您不需要請求對象。 – 2017-08-21 10:57:08

9
Request.ServerVariables["APPL_PHYSICAL_PATH"] 

很好,但並不總是如此。只有存在HTTP請求時纔可用。

在另一方面通話

HostingEnvironment.ApplicationPhysicalPath 

總是可用。

相關問題