ASP.NET 网站路径
from : http://msdn2.microsoft.com/zh-cn/library/ms178116(VS.80).aspx
?
使用網站中的資源時,通常必須指定資源的路徑。例如,您可以使用 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" />如果您的網站為 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 母版頁概述。 |
母版頁和內容頁路徑
當請求某個內容頁時,其內容與母版頁合并,并且該頁在內容頁的上下文中運行。例如,如果獲取 HttpRequest 對象的 CurrentExecutionFilePath 屬性,則無論是在內容頁代碼還是母版頁代碼中,路徑都表示內容頁的位置。
母版頁和內容頁不必位于同一文件夾中。只要內容頁的 @?Page 指令中的 MasterPageFile 屬性解析為一個 .master 頁,ASP.NET 就可以將內容頁和母版頁合并為一個單獨的已呈現的頁。
引用外部資源
內容頁和母版頁都可以包含引用外部資源的控件和元素。例如,兩者都可以包含引用圖像文件的圖像控件,或包含引用其他頁的定位點。
合并的內容和母版頁的上下文是內容頁的上下文。這會影響在定位點上指定資源(如圖像文件和目標頁)的 URL 的方式。
服務器控件中的絕對和相對路徑引用具有以下缺點:
-
絕對路徑在應用程序之間是不可移植的。如果移動絕對路徑指向的應用程序,則鏈接將會中斷。
-
如果將資源或頁面移動到不同的文件夾,可能很難維護采用客戶端元素樣式的相對路徑。
為克服這些缺點,ASP.NET 包括了 Web 應用程序根目錄運算符 (~),當您在服務器控件中指定路徑時可以使用該運算符。ASP.NET 會將 ~ 運算符解析為當前應用程序的根目錄??梢越Y合使用 ~ 運算符和文件夾來指定基于當前根目錄的路徑。
下面的示例演示了使用 Image 服務器控件時用于為圖像指定根目錄相對路徑的 ~ 運算符。在此示例中,無論頁面位于網站中的什么位置,都將從位于 Web 應用程序根目錄下的 Images 文件夾中直接讀取圖像文件。
復制代碼 <asp:image runat="server" id="Image1"ImageUrl="~/Images/SampleImage.jpg" />
可以在服務器控件中的任何與路徑有關的屬性中使用 ~ 運算符。~ 運算符只能為服務器控件識別,并且位于服務器代碼中。不能將 ~ 運算符用于客戶端元素。
| 僅 限于移動頁,如果您的應用程序依賴于無 Cookie 會話或者可能收到來自移動設備的需要無 Cookie 會話的請求,則在路徑中使用波形符(“~”)會導致意外創建新會話,并可能丟失會話數據。若要使用包含波形符(例如“~/路徑”)的路徑來設置移動控件的 屬性,請先使用 ResolveUrl 方法解析該路徑,再將其分配給該屬性。 |
確定當前網站的物理文件路徑
在應用程序中,您可能需要確定服務器上的文件或其他資源的路徑。例如,如果應用程序以編程方式對文本文件進行讀寫操作,則必須為用于讀取和寫入的方法提供該文件的完整物理路徑。
將物理文件路徑(例如 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 與 CurrentExecutionFilePath 屬性不同的是,FilePath 不反映服務器端的傳輸。 |
| 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 方法的路徑必須為應用程序相對路徑,而不是絕對路徑。 |
轉載于:https://www.cnblogs.com/emanlee/archive/2008/04/26/1172591.html
總結
以上是生活随笔為你收集整理的ASP.NET 网站路径的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 通过脚本提示是否提交并将表单发向另一页面
- 下一篇: v-region 地址组件无法回显问题(