ASP.NET 網站路徑

來源:互聯網
上載者:User
asp.net

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

指定資源的路徑

許多情況下,頁面中的元素或控制項必須引用外部資源,如檔案。ASP.NET 允許您通過各種方法引用外部資源。所選方法取決於使用用戶端元素還是伺服器控制項。

用戶端元素

元素(不是頁面中的伺服器控制項,而是用戶端元素)以原樣傳遞給瀏覽器。因此,從用戶端元素中引用資源時,應根據 HTML 中 URL 的標準規則構造路徑。可以使用完全限定(絕對)URL 路徑,也可以使用各種類型的相對路徑。例如,如果頁麵包含一個 img 標記,則可以使用以下路徑之一設定其 src 屬性:

  • 絕對 URL 路徑:

    <img src="http://www.contoso.com/MyApplicationhttp://www.pushad.com/http://www.pushad.com/Info/Images/SampleImage.jpg" />

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

  • 網站根目錄相對路徑,根據網站(不是應用程式)根目錄進行解析。此樣本路徑假定 Images 檔案夾存在於網站根目錄下:

    <img src="http://www.pushad.com/http://www.pushad.com/Info/Images/SampleImage.jpg" />

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

    http://www.contoso.comhttp://www.pushad.com/http://www.pushad.com/Info/Images/SampleImage.jpg

    如果將跨應用程式的資源(如映像或用戶端指令碼檔案)保留在網站根目錄下的檔案夾中,則網站根目錄相對路徑非常有用。

  • 根據當前頁面路徑解析的相對路徑:

    <img src="http://www.pushad.com/Info/Images/SampleImage.jpg" />
  • 解析為當前頁面路徑對等的相對路徑。

    <img src="..http://www.pushad.com/http://www.pushad.com/Info/Images/SampleImage.jpg" />
    注意

    預設情況下,瀏覽器使用當前頁面的 URL 作為基準解析相對路徑。但是,您可以在頁面中包含 HTML base 元素,以指定替代基路徑。

伺服器控制項

在引用資源的 ASP.NET 伺服器控制項中,可以使用絕對路徑或相對路徑,這一點與用戶端元素一樣。如果使用相對路徑,則相對於頁面、使用者控制項或包含該控制項的主題的路徑進行解析。例如,假設 Controls 檔案夾中包含一個使用者控制項。該使用者控制項包含一個 Image Web 伺服器控制項,該伺服器控制項的 ImageUrl 屬性設定為以下路徑:

http://www.pushad.com/Info/Images/SampleImage.jpg

該使用者控制項運行時,路徑將解析為以下形式:

/Controlshttp://www.pushad.com/http://www.pushad.com/Info/Images/SampleImage.jpg

無論承載使用者控制項的頁面位置如何,都是如此。

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

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

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

為克服這些缺點,ASP.NET 啟用了 Web 應用程式根目錄運算子 (~),在伺服器控制項中指定路徑時,可以使用該運算子。ASP.NET 會將 ~ 運算子解析為當前應用程式的根目錄。可以結合使用 ~ 運算子和檔案夾來指定基於當前根目錄的路徑。下面的樣本示範使用 Image 伺服器控制項時用於指定映像的根目錄相對路徑的 ~ 運算子:

<asp:image runat="server" id="Image1"ImageUrl="~http://www.pushad.com/http://www.pushad.com/Info/Images/SampleImage.jpg" />

在該樣本中,影像檔將從 Web 應用程式根目錄下的 Images 檔案夾中直接讀取,無論該頁面位於網站的什麼位置。

注意

~ 運算子只能為伺服器控制項識別,並且位於伺服器代碼中。不能將 ~ 運算子用於用戶端元素。

可以在伺服器控制項中的任何與路徑有關的屬性中使用 ~ 運算子。

注意

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

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

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

將物理檔案路徑(如 C:\Website\MyApplication)寫入程式碼到應用程式中並不是很好的做法,因為如果移動或部署應用程式,則路徑會發生更改。但是,ASP.NET 為您提供了以編程方式擷取應用程式中的任何物理檔案路徑的方法。然後,您可以使用基檔案路徑建立所需資源的完整路徑。用於確定檔案路徑的兩種最常用的 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

不同於 CurrentExecutionFilePathFilePath 不反映伺服器端轉換。

Path

擷取當前請求的虛擬路徑。對於此樣本,該屬性將返回以下內容:

/MyApplication/MyPages/default.aspx

PhysicalApplicationPath

擷取當前正在執行的應用程式的根目錄的物理檔案系統路徑。對於此樣本,該屬性將返回以下內容:

C:\inetpub\wwwroot\

PhysicalPath

擷取與請求的 URL 對應的物理檔案系統路徑。對於此樣本,該屬性將返回以下內容:

C:\inetpub\wwwroot\MyApplication\MyPages\default.aspx

使用 MapPath 方法

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

Visual Basic 複製代碼
Dim rootPath As String = Server.MapPath("~")
C# 複製代碼
String rootPath = Server.MapPath("~");
注意

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



相關文章

E-Commerce Solutions

Leverage the same tools powering the Alibaba Ecosystem

Learn more >

Apsara Conference 2019

The Rise of Data Intelligence, September 25th - 27th, Hangzhou, China

Learn more >

Alibaba Cloud Free Trial

Learn and experience the power of Alibaba Cloud with a free trial worth $300-1200 USD

Learn more >

聯繫我們

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

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