ASP.net 路徑問題 詳解

來源:互聯網
上載者:User

偶爾還會因路徑的問題鬱悶了半天 還以為是程式上出了問題了。以下我是轉自--指令碼之家 裡的一篇技文,略作修改,以備不時只需,各位有需要的也可參考參考,有錯的也請各位指出。

比如你的工程是Webapplication1(url是:http://localhost/webapplication1/webform1.aspx)
Request.ApplicationPath 就是/Webapplication1
如果是網站就直接返回"/";
------------------------------------------------------
~/ 可以用在需要設定路徑的控制項比如:imagebutton,image等 以及連結ascx檔案,設定檔.
../ 的好處是可以不知道檔案夾的名字知道階層就可以了
/ 的好處是針對根路徑,如果本地目錄和伺服器目錄一致,那直接用/就可以保證路徑正確,這種情況很少.
Request.ApplicationPath 注意如果沒有虛擬目錄就直接返回/,那你程式裡面就不要設定/
比如
Request.ApplicationPath+"/images/a.gif" 如果是網站 就是等於 "//images/a.gif",錯誤的
如果有虛擬目錄就是 "Webapplication1/images/a.gif"
沒有/的
Request.ApplicationPath 發揮虛擬目錄名稱,如果是網站就返回/
~/ 類似,不過只用服務端的空間可以識別;
/ 針對目錄
./ 目前的目錄
../ 相對目前的目錄的上層目錄
比如你的工程是Webapplication1(url是:http://localhost/webapplication1/webform1.aspx)
Request.ApplicationPath 就是Webapplication1/
~/ 也是 Webapplication1/
/就是http://localhost/
如果webform1.aspx 下有個檔案webform2.aspx
你可以在webform1.aspx裡這樣使用
<a href=webform2.aspx>ddd</a>
或者
<a href=/webapplication1/webform2.aspx></a>
或者
<a href=../webform2.aspx></a>

ASP.NET 網站路徑
使用網站中的資源時,通常必須指定資源的路徑。例如,您可以使用 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 主版頁面概述。

伺服器控制項中的絕對和相對路徑引用具有以下缺點:
絕對路徑在應用程式之間是不可移植的。如果移動絕對路徑指向的應用程式,則連結將會中斷。
如果將資源或頁面移動到不同的檔案夾,可能很難維護採用用戶端元素樣式的相對路徑。
為克服這些缺點,ASP.NET 包括了 Web 應用程式根目錄運算子 (~),當您在伺服器控制項中指定路徑時可以使用該運算子。ASP.NET 會將 ~ 運算子解析為當前應用程式的根目錄。可以結合使用 ~ 運算子和檔案夾來指定基於當前根目錄的路徑。
下面的樣本示範了使用 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 方法的路徑必須為應用程式相對路徑,而不是絕對路徑。
Control.ResolveUrl 方法 [C#]請參見
Control 類 | Control 成員 | System.Web.UI 命名空間 | TemplateSourceDirectory | Control 成員(Visual J# 文法) | C++ 託管擴充編程
要求
平台: Windows 2000, Windows XP Professional, Windows Server 2003 系列

語言
C#
C++
JScript
Visual Basic
全部顯示
將 URL 轉換為在請求用戶端可用的 URL。

[Visual Basic]
Public Function ResolveUrl( _
ByVal relativeUrl As String _
) As String

[C#]
public string ResolveUrl(
string relativeUrl
);

[C++]
public: String* ResolveUrl(
String* relativeUrl
);

[JScript]
public function ResolveUrl(
relativeUrl : String
) : String;

參數
relativeUrl
與 TemplateSourceDirectory 屬性相關聯的 URL。
傳回值
轉換後的 URL。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.