ASP.NET 開發中常需解析 URL 以取得路徑、查詢字串、主機名稱等資訊。HttpRequest 提供多個屬性,但名稱相似、用途不同,容易混淆。本文以實測對照表方式,釐清各屬性差異,並提供快速查詢參考。
測試網址:https://www.test.com/testweb/default.aspx(無查詢字串)
| 屬性/方法 | 回傳值 | 說明 |
|---|---|---|
Request.ApplicationPath | /testweb | 應用程式虛擬根目錄路徑 |
Request.CurrentExecutionFilePath | /testweb/default.aspx | 目前正在執行的檔案虛擬路徑(含 Server.Transfer 後的目標頁面) |
Request.FilePath | /testweb/default.aspx | 要求檔案的虛擬路徑(不含查詢字串) |
Request.Path | /testweb/default.aspx | 完整虛擬路徑(含 PathInfo,不含查詢字串) |
Request.PathInfo | (空字串) | 路徑資訊(位於 .aspx 之後、查詢字串之前的部分) |
Request.PhysicalApplicationPath | E:\WWW\testweb\ | 應用程式實體磁碟路徑 |
Request.PhysicalPath | E:\WWW\testweb\default.aspx | 要求檔案的實體磁碟路徑 |
Request.RawUrl | /testweb/default.aspx | 原始 URL(虛擬路徑 + 查詢字串,不含主機) |
Request.Url.AbsolutePath | /testweb/default.aspx | Uri 物件的絕對路徑(虛擬路徑) |
Request.Url.AbsoluteUri | https://www.test.com/testweb/default.aspx | 完整絕對 URL(含通訊協定、主機、路徑、查詢字串) |
Request.Url.Host | www.test.com | 主機名稱 |
Request.Url.LocalPath | /testweb/default.aspx | 本機路徑(虛擬路徑,同 AbsolutePath) |
當 URL 為 https://www.test.com/testweb/default.aspx?id=123&name=abc 時:
Request.RawUrl → /testweb/default.aspx?id=123&name=abcRequest.Url.PathAndQuery → /testweb/default.aspx?id=123&name=abcRequest.Url.Query → ?id=123&name=abcHttpContext.Current.Request.Url.PathAndQuery.ToString() 同 Request.Url.PathAndQuery| 需求 | 建議屬性 |
|---|---|
| 取得完整 URL(含查詢字串) | Request.Url.AbsoluteUri 或 Request.Url.ToString() |
| 取得虛擬路徑(不含查詢字串) | Request.Path 或 Request.FilePath |
| 取得查詢字串字典 | Request.QueryString |
| 取得應用程式根目錄虛擬路徑 | Request.ApplicationPath |
| 取得實體磁碟路徑(對應檔案) | Request.PhysicalPath |
| 判斷是否為特定頁面(不受 Transfer 影響) | Request.FilePath |
| 判斷目前實際執行頁面(受 Transfer 影響) | Request.CurrentExecutionFilePath |
若 PageA.aspx 執行 Server.Transfer("PageB.aspx"):
Request.FilePath 仍為 /PageA.aspxRequest.CurrentExecutionFilePath 變為 /PageB.aspx此特性常用於判斷「原始要求頁面」vs「目前執行頁面」。