路徑都會分為絕對路徑和相對路徑之分,並且在asp.net中用戶端控制項和服務端控制項的相對路徑表達方式有不小區別。
詳細如下:
用戶端元素
1、絕對 URL 路徑。如果引用其他位置(例如外部網站)中的資源,則絕對 URL 路徑非常有用。
<img src="http://www.contoso.com/MyApplication/Images/SampleImage.jpg" />
2、相對根目錄
<img src="/Images/SampleImage.jpg" />(如果您的網站為 http://www.contoso.com,則此路徑將解析為以下形式。http://www.contoso.com/Images/SampleImage.jpg
)
3、相對目前的目錄
<img src="Images/SampleImage.jpg" />
伺服器控制項
假設 Controls 檔案夾中包含一個使用者控制項。該使用者控制項包含一個 Image Web 伺服器控制項,此伺服器控制項的 ImageUrl 屬性被設定為以下路徑:Images/SampleImage.jpg。當該使用者控制項運行時,上述路徑將解析為以下形式:/Controls/Images/SampleImage.jpg。無論承載該使用者控制項的頁面位於何處,結果都是如此。在主控頁中,資源的路徑基於內容頁的路徑進行解析。
伺服器控制項中的絕對和相對路徑引用具有以下缺點:
為克服這些缺點,ASP.NET 包括了 Web 應用程式根目錄運算子 (~),當您在伺服器控制項中指定路徑時可以使用該運算子。ASP.NET 會將 ~ 運算子解析為當前應用程式的根目錄。可以結合使用 ~ 運算子和檔案夾來指定基於當前根目錄的路徑。
<asp:image runat="server" id="Image1" ImageUrl="~/Images/SampleImage.jpg" />
可以在伺服器控制項中的任何與路徑有關的屬性中使用 ~ 運算子。~ 運算子只能為伺服器控制項識別,並且位於伺服器代碼中。不能將 ~ 運算子用於用戶端元素。
注意:
僅限於移動頁,如果您的應用程式依賴於無 Cookie 會話或者可能收到來自行動裝置的需要無 Cookie 會話的請求,則在路徑中使用波狀符號(“~”)會導致意外建立新會話,並可能丟失會話資料。若要使用包含波狀符號(例如“~/路徑”)的路徑來設定行動控制項的屬性,請先使用 ResolveUrl 方法解析該路徑,再將其分配給該屬性。
確定當前網站的物理檔案路徑
1、根據請求屬性確定路徑
表中列出的樣本基於下面的假設:
已使用以下 URL 發出瀏覽器請求:http://www.contoso.com/MyApplication/MyPages/Default.aspx。
術語“虛擬路徑”是指請求 URL 中跟在伺服器標識符後面的部分;在此樣本中,虛擬路徑是指以下路徑:/MyApplication/MyPages/Default.aspx。
網站根目錄的實體路徑為:C:/inetpub/wwwroot/MyApplication/。
該實體路徑中包含一個名為 MyPages 的檔案夾。
屬性 |
說明 |
ApplicationPath |
擷取當前應用程式的根目錄路徑,無論在該應用程式中的什麼位置請求該路徑。在此樣本中,該屬性將返回以下內容:/ |
CurrentExecutionFilePath |
擷取當前請求的虛擬路徑。它與 FilePath 屬性的不同之處在於,如果請求已在伺服器代碼中被重新導向,則 CurrentExecutionFilePath 就是正確的。在此樣本中,該屬性將返回以下內容:/MyApplication/MyPages/Default.aspx 如果作為對 Transfer 或 Execute 進行調用的結果,您擷取正在啟動並執行代碼中的屬性,則路徑將反映該代碼的位置。 |
FilePath |
擷取當前請求的虛擬路徑。在此樣本中,該屬性將返回以下內容:/MyApplication/MyPages/Default.aspx 與 CurrentExecutionFilePath 屬性不同的是,FilePath 不反映伺服器端的傳輸。 |
Path |
擷取當前請求的虛擬路徑。在此樣本中,該屬性將返回以下內容:/MyApplication/MyPages/default.aspx |
PhysicalApplicationPath |
擷取當前正在執行的應用程式的根目錄的物理檔案系統路徑。在此樣本中,該屬性將返回以下內容:C:/inetpub/wwwroot/ |
PhysicalPath |
擷取與請求的 URL 相對應的物理檔案系統路徑。在此樣本中,該屬性將返回以下內容:C:/inetpub/wwwroot/MyApplication/MyPages/default.aspx |
2、使用 MapPath 方法
MapPath 方法返回傳遞給該方法的虛擬路徑的完整實體路徑
String rootPath = Server.MapPath("~");
String rootPath = HostingEnvironment.MapPath("~/image/aa/bb");
更詳細的內容請參考MSDN.