我們在開發網頁應用程式,時常需要去解析網址(Request.Url)的每個片段,進行一些判斷。例如說 "
http://localhost:1897/News/Press/Content.aspx/123?id=1#toc",我們想要取得網址裡第一層目錄的名字(News)用以判斷不同的頁面標題(Page Title)。
我看很多人都用字串的 IndexOf 方法與 Substring 方法: Request.Url.PathAndQuery.Substring(1, Request.Url.PathAndQuery.IndexOf("/", 1)-1)
這實在太埋沒 .NET 的強大設計了,事實上在 Request 物件就已經提供很多方便的屬性(Property)可供取得網址的片段。
底下這張表就是各種跟 Browser Request 的網址相關的屬性與用法:
網址:http://localhost:1897/News/Press/Content.aspx/123?id=1#toc |
Request.ApplicationPath |
/ |
Request.PhysicalPath |
D:/Projects/Solution/web/News/Press/Content.aspx |
System.IO.Path.GetDirectoryName(Request.PhysicalPath) |
D:/Projects/Solution/web/News/Press |
Request.PhysicalApplicationPath |
D:/Projects/Solution/web/ |
System.IO.Path.GetFileName(Request.PhysicalPath) |
Content.aspx |
Request.CurrentExecutionFilePath |
/News/Press/Content.aspx |
Request.FilePath |
/News/Press/Content.aspx |
Request.Path |
/News/Press/Content.aspx/123 |
Request.RawUrl |
/News/Press/Content.aspx/123?id=1 |
Request.Url.AbsolutePath |
/News/Press/Content.aspx/123 |
Request.Url.AbsoluteUri |
http://localhost:1897/News/Press/Content.aspx/123?id=1 |
Request.Url.Scheme |
http |
Request.Url.Host |
localhost |
Request.Url.Port |
1897 |
Request.Url.Authority |
localhost:1897 |
Request.Url.LocalPath |
/News/Press/Content.aspx/123 |
Request.PathInfo |
/123 |
Request.Url.PathAndQuery |
/News/Press/Content.aspx/123?id=1 |
Request.Url.Query |
?id=1 |
Request.Url.Fragment |
|
Request.Url.Segments |
/ News/ Press/ Content.aspx/ 123 |
所以當你看了這張表之後,你還會想用 Request.Url.PathAndQuery.Substring(1, Request.Url.PathAndQuery.IndexOf("/", 1)-1) 這種寫法嗎?
用這樣寫 Request.Url.Segments[1].Replace("/", "") 不是又短又直接嗎? ^_^
============================================================================
Request擷取url資訊的各種方法比較
在ASP.NET編程中經常需要用Request擷取url的有關資訊,Request中有多種方法擷取url資訊,但我經常忘了各種方法的具體作用,今天我就寫了個測試程式,將各種方法得到的結果列出來,以後用時直接參考一下就行了。
測試的url地址是http://www.test.com/testweb/default.aspx, 結果如下:
Request.ApplicationPath: /testweb
Request.CurrentExecutionFilePath: /testweb/default.aspx
Request.FilePath: /testweb/default.aspx
Request.Path: /testweb/default.aspx
Request.PathInfo:
Request.PhysicalApplicationPath: E:/WWW/testweb/
Request.PhysicalPath: E:/WWW/testweb/default.aspx
Request.RawUrl: /testweb/default.aspx
Request.Url.AbsolutePath: /testweb/default.aspx
Request.Url.AbsoluteUri: http://www.test.com/testweb/default.aspx
Request.Url.Host: www.test.com
Request.Url.LocalPath: /testweb/default.aspx