給定 URL 字串 "https://job.cnblogs.com/images/job_logo.gif",需提取路徑部分 "/images/job_logo.gif"。限制條件:只能使用 .NET 類庫 API,且追求最簡潔寫法。
Path.GetDirectoryName(url) + "\\" + Path.GetFileName(url);
// 結果:"http:\job.cnblogs.com\images\job_logo.gif" // 反斜線、協議殘留
Path 類別處理的是檔案系統路徑,不支援 URL 格式,會將 :// 視為路徑分隔符的一部分。
VirtualPathUtility.GetDirectory(url) + VirtualPathUtility.GetFileName(url);
// ArgumentException:相對虛擬路徑 'http:/job.cnblogs.com/images/job_logo.gif' 不被允許
該類別僅支援應用程式相對路徑(以 ~/ 或 / 開頭),不接受完整 URL。
string path = new Uri(url).AbsolutePath;
// 直接得到 "/images/job_logo.gif"
| 屬性 | 範例值 | 說明 |
|---|---|---|
AbsoluteUri | https://job.cnblogs.com/images/job_logo.gif | 完整 URL |
Scheme | http | 協議 |
Host | job.cnblogs.com | 主機名 |
Port | 80 | 埠號(預設會顯示) |
AbsolutePath | /images/job_logo.gif | 路徑(含前導 /) |
Query | (空或 ?id=123) | 查詢字串 |
Fragment | (空或 #section) | 片段識別碼 |
string relativePath = new Uri(url).AbsolutePath.TrimStart('/'); // "images/job_logo.gif"
結論:處理 URL 解析,System.Uri 是 .NET 內建、標準、最可靠的選擇,切勿自行字串切割或誤用檔案路徑 API。