共用方式為


ASP.NET 網站路徑

更新:2007 年 11 月

當使用網站的資源時,您通常必須指定資源的路徑。例如,可以使用 URL 路徑參考網頁中的影像檔,或是網站中其他處網頁的 URL。同樣地,Web 應用程式中的程式碼會使用伺服器架構檔案的實體檔案路徑,以便讀取或寫入檔案。ASP.NET 提供參考資源和判斷網頁路徑,或是應用程式中其他資源的設備。

指定資源的路徑

大多數狀況下,網頁上的項目或控制項必須參考像是檔案的外部資源。ASP.NET 支援多種參考外部資源的方法。您選擇的參考方法需視使用的是用戶端項目還是 Web 伺服器控制項而定。

用戶端項目

在網頁上不是 Web 伺服器控制項的項目 (即用戶端項目) 都會被原封不動地傳送給瀏覽器。因此,當參考來自用戶端項目的資源時,會根據 URL 在 HTML 中的標準規則建構路徑。您可以使用完整 (也就是絕對) URL 路徑,或是各種相對路徑。例如,假設網頁包含 img 項目,您可以使用下列其中一個路徑來設定其 src 屬性:

  • 絕對 URL 路徑,如果要參考其他位置 (例如外部網站) 中的資源,則絕對 URL 路徑就很有用。

    <img src="https://www.contoso.com/MyApplication/Images/SampleImage.jpg" />
    
  • 根據站台根目錄 (而不是應用程式根目錄) 解析的站台根目錄相對路徑。如果將跨應用程式的資源 (例如影像或用戶端指令碼檔案) 存放在網站根目錄下的資料夾中,則站台根目錄相對路徑非常有用。

    這個範例路徑假設 Images 資料夾位在網站根目錄下。

    <img src="/Images/SampleImage.jpg" />
    

    如果網站是 https://www.contoso.com,路徑會解析為下列所示。

    https://www.contoso.com/Images/SampleImage.jpg
    
  • 根據目前網頁路徑解析的相對路徑。

    <img src="Images/SampleImage.jpg" />
    
  • 解析為對等目前網頁路徑的相對路徑。

    <img src="../Images/SampleImage.jpg" />
    
    注意事項:

    根據預設,瀏覽器會使用目前網頁 URL 做為基礎來解析相對路徑。然而,您可以將 HTML base 項目包含在網頁中,指定替代基礎路徑。

伺服器控制項

在參考資源的 ASP.NET 伺服器控制項中,您可以如同用戶端項目一樣使用絕對或相對路徑。如果您使用相對路徑,就會根據相對於網頁路徑、使用者控制項或控制項包含的佈景主題進行解析。例如,想像您在 Controls 資料夾中有個使用者控制項。這個使用者控制項包含 Image Web 伺服器控制項,其 ImageUrl 屬性是設定為下列路徑:Images/SampleImage.jpg。

當使用者控制項執行時,路徑會解析為:/Controls/Images/SampleImage.jpg。不管裝載 (Host) 使用者控制項的網頁位置,情況也是這樣。

注意事項:

在主版頁面中,會根據內容頁面的路徑解析資源的路徑。如需詳細資訊,請參閱 ASP.NET 主版頁面概觀

伺服器控制項中的絕對和相對路徑參考有下列缺點:

  • 絕對路徑無法在應用程式之間移植。如果您移動絕對路徑指向的應用程式,連結就會中斷。

  • 如果您將資源或網頁移動至不同的資料夾,就會很難維護用戶端項目樣式的相對路徑。

為了克服這些缺點,ASP.NET 包含了 Web 應用程式根目錄運算子 (~),當您在伺服器控制項中指定路徑時,便可以使用這個運算子。ASP.NET 會將 ~ 運算子解析為目前應用程式的根目錄。您可以將 ~ 運算子結合資料夾使用,根據目前的根目錄指定路徑。

下列範例將示範 ~ 運算子,它會被用來在使用 Image 伺服器控制項時,指定影像的根目錄相對路徑。在這個範例中,不管網頁位在網站的什麼地方,都會從直接位於 Web 應用程式根目錄下的 Images 資料夾中讀取該影像檔案。

<asp:image  id="Image1"
  ImageUrl="~/Images/SampleImage.jpg" />

您可以在伺服器控制項的任何路徑相關屬性中使用 ~ 運算子。只有在伺服器控制項和伺服端程式碼中才會辨識 ~ 運算子。您無法在用戶端項目上使用 ~ 運算子。

注意事項:

(僅限行動頁面) 如果應用程式依賴 Cookieless 工作階段 (Session) 或可能收到來自需要 Cookieless 工作階段之行動裝置的要求,則在路徑中使用波狀符號 ("~") 可能會導致不慎建立新工作階段,並可能遺失工作階段資料。若要以含波狀符號 (例如 "~/path") 的路徑來設定行動控制項上的屬性,請先使用 ResolveUrl 方法來解析路徑,再將它指派給該屬性。

判斷目前網站的實體檔案路徑

在應用程式中,您可能需要判斷檔案或伺服器上其他資源的路徑。例如,如果應用程式以程式設計方式讀取或寫入文字檔案,您必須將檔案的完整實體路徑提供給用來讀取和寫入的方法。

使用硬式編碼將實體檔案路徑 (例如 C:\Website\MyApplication) 寫入應用程式不是一個好的作法,因為如果移動或部署應用程式就會變更路徑。然而,ASP.NET 提供方法讓您以程式設計方式,從應用程式中取得任何實體檔案路徑。然後您可以使用基礎檔案路徑建立所需資源的完整路徑。最常用來判斷檔案路徑的兩種 ASP.NET 功能,是傳回路徑資訊的 HttpRequest 物件屬性以及 MapPath 方法。

注意事項:

您不應該將實體檔案路徑傳送至用戶端,因為惡意使用者可以用來取得應用程式的資訊。

從 Request 屬性判斷路徑

下表列出協助您判斷應用程式中資源路徑的 HttpRequest 物件屬性。

下表所列的範例是以下列假設為基礎:

  • 已使用下列 URL 發出瀏覽器要求:https://www.contoso.com/MyApplication/MyPages/Default.aspx.

  • 詞彙「虛擬路徑」是指跟隨在伺服器識別項後面的要求 URL 部分。在上述情況下,虛擬路徑為:/MyApplication/MyPages/Default.aspx。

  • 網站根目錄的實體路徑為:C:\inetpub\wwwroot\MyApplication\。

  • 實體路徑包含名為 MyPages 的資料夾。

屬性

說明

ApplicationPath

取得目前應用程式的根路徑,不論是在應用程式的何處提出要求。例如,此屬性會傳回下列項目:/

CurrentExecutionFilePath

取得目前要求的虛擬路徑。如果要求已在伺服端程式碼中被重新導向,則前者與 CurrentExecutionFilePath 中的 FilePath 屬性所取得的值會不相同,而這是正確的結果。例如,此屬性會傳回下列項目:/MyApplication/MyPages/Default.aspx

如果您取得程式碼中的屬性當做呼叫 TransferExecute 的結果,路徑會反映程式碼的位置。

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

使用 MapPath 方法

MapPath 方法會傳回傳遞給方法之虛擬路徑的完整實體路徑。例如,下列程式碼會傳回網站根目錄的檔案路徑:

Dim rootPath As String = Server.MapPath("~")
String rootPath = Server.MapPath("~");
注意事項:

傳遞給 MapPath 方法的路徑必須是應用程式的相對路徑,而不是絕對路徑。

請參閱

概念

ASP.NET 網站配置

ASP.NET Web 應用程式中的網頁和應用程式內容