ASP.NET Web 項目路徑

來源:互聯網
上載者:User
ASP.NET Web 項目路徑
.NET Framework 4

其他版本

使用 Web 項目中的資源時,通常必須指定資源的路徑。 例如,您可以使用 URL 路徑引用頁面中的影像檔或網站中其他位置處的頁面的 URL。 同樣,Web 項目中的代碼可以使用基於伺服器的檔案的物理檔案路徑對檔案進行讀寫操作。 ASP.NET 提供用於引用資源並確定應用程式中的頁面或其他資源的路徑的方法。

指定資源的路徑

許多情況下,頁面中的元素或控制項必須引用外部資源,如檔案。 ASP.NET 支援引用外部資源的各種方法。 根據您使用的是用戶端元素還是 Web 伺服器控制項,選擇的引用方法將有所不同。

用戶端元素

用戶端元素是頁面上的非 Web 伺服器控制項元素,它們將按原樣被傳遞給瀏覽器。 因此,從用戶端元素中引用資源時,應根據 HTML 中 URL 的標準規則構造路徑。 可以使用完整 URL 路徑(又稱為絕對 URL 路徑),也可以使用各種類型的相對路徑。 例如,如果頁麵包含 img 元素,則可以使用以下路徑之一設定其 src 特性:

  • 絕對 URL 路徑。 如果引用其他位置(例如外部網站)中的資源,則絕對 URL 路徑非常有用。

    <img src="http://www.contoso.com/MyApplication/Images/SampleImage.jpg" />
  • 網站根目錄相對路徑,此路徑將根據網站根目錄進行解析。 如果將在整個網站所用的資源(例像或用戶端指令碼檔案)保留在網站根目錄下的檔案夾中,則網站根目錄相對路徑非常有用。

    下面的樣本路徑假定 Images 檔案夾位於網站根目錄下。

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

    如果網站的 URL 為 http://www.contoso.com,則此路徑將解析為以下形式:

    http://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。 無論承載該使用者控制項的頁面位於何處,結果都是如此。

注意

在主控頁中,資源的路徑基於內容頁的路徑進行解析。 有關更多資訊,請參見 ASP.NET 主版頁面。

伺服器控制項中的絕對和相對路徑引用具有以下缺點:

  • 絕對路徑在應用程式之間是不可移植的。 如果移動絕對路徑指向的應用程式,則連結將會中斷。

  • 如果將資源或頁面移動到不同的檔案夾,可能很難維護採用用戶端元素樣式的相對路徑。

為克服這些缺點,ASP.NET 包括了 Web 應用程式根目錄運算子 (~),當您在伺服器控制項中指定路徑時可以使用該運算子。 ASP.NET 會將 ~ 運算子解析為當前應用程式的根目錄。 可以結合使用 ~ 運算子和檔案夾來指定基於當前根目錄的路徑。

下面的樣本示範了使用 Image 伺服器控制項時用於為映像指定根目錄相對路徑的 ~ 運算子。在此樣本中,無論頁面位於網站中的什麼位置,都將從位於 Web 應用程式根目錄下的 Images 檔案夾中直接讀取影像檔。

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

可以在伺服器控制項中的任何與路徑有關的屬性中使用 ~ 運算子。 ~ 運算子只能為伺服器控制項識別,並且位於伺服器代碼中。 不能將 ~ 運算子用於用戶端元素。

確定當前網站的物理檔案路徑

在應用程式中,您可能需要確定伺服器上的檔案或其他資源的路徑。 例如,如果 Web 項目以編程方式對文字檔進行讀寫操作,則必須為用於讀取和寫入的方法提供該檔案的完整實體路徑。

將物理檔案路徑(例如 C:\Website\MyApplication)寫入程式碼到應用程式中並不是很好的做法,因為如果移動或部署應用程式,將會更改這些路徑。 此外,如果將網站部署到承載提供者,您可能不會知道具體的實體路徑。 但是,ASP.NET 為您提供了以編程方式擷取 Web 項目中的任何物理檔案路徑的方法。 然後,您可以使用基檔案路徑建立所需資源的完整路徑。 用於確定檔案路徑的兩種最常用的 ASP.NET 功能是返迴路徑資訊的 HttpRequest 對象的屬性,以及 MapPath 方法。

注意

不應將物理檔案路徑發送到用戶端,因為它們可能會被惡意使用者用來擷取有關您的應用程式的資訊。

根據請求屬性確定路徑

下表列出了 HttpRequest 對象的屬性,這些屬性協助您確定應用程式中的資源的路徑。

表中列出的樣本基於下面的假設:

  • 已使用以下 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

將虛擬路徑轉換為實體路徑

MapPath 方法返回傳遞給該方法的虛擬路徑的完整實體路徑。 例如,以下代碼返回網站根目錄的檔案路徑:

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.