首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> .NET 網頁程式設計 >> ASP.NET 基礎 >> ASP.NET 基礎

ASP.NET Request.Url 屬性完整對照表:從 AbsoluteUri 到 Segments 實測詳解

     編輯:ASP.NET 基礎

測試環境與網址

  • IIS 網站:主機名 wjnhome.com,連接埠 88
  • 虛擬目錄:virtual 指向同一站點
  • hosts:127.0.0.1 wjnhome.com
  • 測試網址:https://wjnhome.com:88/virtual/urldemo.aspx?id=2#top

核心屬性測試程式碼

// 虛擬目錄路徑
Response.Write("Request.ApplicationPath: " + Request.ApplicationPath);

// 實體檔案完整路徑
Response.Write("Request.PhysicalPath: " + Request.PhysicalPath);
Response.Write("DirectoryName: " + System.IO.Path.GetDirectoryName(Request.PhysicalPath));
Response.Write("Request.PhysicalApplicationPath: " + Request.PhysicalApplicationPath);

// 目前頁面檔名
Response.Write("FileName: " + System.IO.Path.GetFileName(Request.PhysicalPath));

// 虛擬路徑
Response.Write("Request.CurrentExecutionFilePath: " + Request.CurrentExecutionFilePath);
Response.Write("Request.FilePath: " + Request.FilePath);
Response.Write("Request.Path: " + Request.Path);

// 原始 URL 與 Uri 屬性
Response.Write("Request.RawUrl: " + Request.RawUrl);
Response.Write("Request.Url.AbsolutePath: " + Request.Url.AbsolutePath);
Response.Write("Request.Url.AbsoluteUri: " + Request.Url.AbsoluteUri);
Response.Write("Request.Url.Scheme: " + Request.Url.Scheme);
Response.Write("Request.Url.Host: " + Request.Url.Host);
Response.Write("Request.Url.Port: " + Request.Url.Port);
Response.Write("Request.Url.Authority: " + Request.Url.Authority);
Response.Write("Request.Url.LocalPath: " + Request.Url.LocalPath);
Response.Write("Request.PathInfo: " + Request.PathInfo);
Response.Write("Request.Url.PathAndQuery: " + Request.Url.PathAndQuery);
Response.Write("Request.Url.Query: " + Request.Url.Query);
Response.Write("Request.Url.Fragment: " + Request.Url.Fragment);
Response.Write("Request.Url.DnsSafeHost: " + Request.Url.DnsSafeHost);
Response.Write("Request.Url.OriginalString: " + Request.Url.OriginalString);
Response.Write("Request.Url.UserInfo: " + Request.Url.UserInfo);
Response.Write("Request.UrlReferrer: " + Request.UrlReferrer);

// Uri.Segments 逐段拆解
for (int i = 0; i < Request.Url.Segments.Length; i++)
{
    Response.Write("Request.Url.Segment" + i + ": " + Request.Url.Segments[i]);
}

實際輸出結果對照表

屬性/方法輸出值說明
Request.ApplicationPath/virtual虛擬目錄應用程式路徑
Request.PhysicalPathE:\VsProject\201200420\UrlDemo\UrlDemo\urldemo.aspx伺服器端實體檔案完整路徑
DirectoryNameE:\VsProject\201200420\UrlDemo\UrlDemo實體目錄路徑
Request.PhysicalApplicationPathE:\VsProject\201200420\UrlDemo\UrlDemo\應用程式實體根目錄
FileNameurldemo.aspx目前執行檔案名稱
Request.CurrentExecutionFilePath/virtual/urldemo.aspx目前執行檔案虛擬路徑(含虛擬目錄)
Request.FilePath/virtual/urldemo.aspx請求檔案虛擬路徑
Request.Path/virtual/urldemo.aspx請求虛擬路徑(同 FilePath)
Request.RawUrl/virtual/urldemo.aspx?id=2原始 URL(含查詢字串,不含片段)
Request.Url.AbsolutePath/virtual/urldemo.aspx絕對路徑(不含查詢字串)
Request.Url.AbsoluteUrihttps://wjnhome.com:88/virtual/urldemo.aspx?id=2完整絕對 URI
Request.Url.Schemehttp通訊協定
Request.Url.Hostwjnhome.com主機名稱
Request.Url.Port88連接埠號
Request.Url.Authoritywjnhome.com:88主機名 + 連接埠
Request.Url.LocalPath/virtual/urldemo.aspx本地檔案系統格式路徑
Request.PathInfo(空字串)附加路徑資訊(如 /page.aspx/extra)
Request.Url.PathAndQuery/virtual/urldemo.aspx?id=2路徑 + 查詢字串
Request.Url.Query?id=2查詢字串(含 ?)
Request.Url.Fragment(空字串)片段識別符(# 後內容),瀏覽器不送至伺服器
Request.Url.DnsSafeHostwjnhome.com適合 DNS 查詢的主機名(IPv6 時加括號)
Request.Url.OriginalStringhttps://wjnhome.com:88/virtual/urldemo.aspx?id=2原始 URI 字串
Request.Url.UserInfo(空字串)使用者資訊(如 user:pass@host)
Request.UrlReferrer(空字串)來源頁面 URL(若有轉向)
Request.Url.Segment0/根路徑
Request.Url.Segment1virtual/虛擬目錄段
Request.Url.Segment2urldemo.aspx檔案段

常見屬性群組速查

虛擬路徑相關

  • ApplicationPath:應用程式根虛擬路徑(含虛擬目錄)
  • FilePath / Path / CurrentExecutionFilePath:目前要求檔案虛擬路徑
  • Url.AbsolutePath / Url.LocalPath:不含查詢字串的路徑

實體路徑相關

  • PhysicalPath:完整實體檔案路徑
  • PhysicalApplicationPath:應用程式實體根目錄

完整 URL 相關

  • RawUrl:原始 URL(相對路徑 + Query)
  • Url.AbsoluteUri:完整絕對 URI
  • Url.OriginalString:原始字串表示

查詢字串與片段

  • Url.Query:?id=2(含問號)
  • Url.PathAndQuery:路徑 + 查詢字串
  • Url.Fragment:伺服器端無法取得,瀏覽器不傳送

主機與連接埠

  • Url.Host / Url.DnsSafeHost:主機名
  • Url.Port:連接埠
  • Url.Authority:Host:Port 組合
  • Url.Scheme:http/https

實務應用提示

  1. 重導向建構:使用 Request.Url.GetLeftPart(UriPartial.Authority) + Request.ApplicationPath 組合基底 URL
  2. 取得根網址:Request.Url.Scheme + "://" + Request.Url.Authority + Request.ApplicationPath
  3. 判斷虛擬目錄:Request.ApplicationPath != "/"
  4. 片段識別符:純前端用途(錨點、SPA 路由),伺服器不可依賴
  5. UrlReferrer:可為 null,需檢查再使用,不可作為安全依據
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved