我们在开发网页应用程式,时常需要去解析网址(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("/", "") 不是又短又直觉吗? ^_^
以下是产生以上表格的代码:
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
![ExpandedBlockStart.gif](https://images.cnblogs.com/OutliningIndicators/ExpandedBlockStart.gif)
{
StringBuilder sb = new StringBuilder();
sb.Append( " <table cellpadding=3 cellspacing=0 border=1> " );
sb.Append( " <tr><td colspan=2> " );
sb.Append( " 网址:http://localhost:1897/News/Press/Content.aspx/123?id=1#toc " );
sb.Append( " </td></tr> " );
// Request.ApplicationPath
sb.Append( " <tr><td> " );
sb.Append( " Request.ApplicationPath " );
sb.Append( " </td><td> " );
sb.Append( " <b> " + Request.ApplicationPath + " </b> " );
sb.Append( " </td></tr> " );
// Request.PhysicalPath
sb.Append( " <tr><td> " );
sb.Append( " Request.PhysicalPath " );
sb.Append( " </td><td> " );
sb.Append( " <b> " + Request.PhysicalPath + " </b> " );
sb.Append( " </td></tr> " );
// System.IO.Path.GetDirectoryName(Request.PhysicalPath)
sb.Append( " <tr><td> " );
sb.Append( " System.IO.Path.GetDirectoryName(Request.PhysicalPath) " );
sb.Append( " </td><td> " );
sb.Append( " <b> " + System.IO.Path.GetDirectoryName(Request.PhysicalPath) + " </b> " );
sb.Append( " </td></tr> " );
// Request.PhysicalApplicationPath
sb.Append( " <tr><td> " );
sb.Append( " Request.PhysicalApplicationPath " );
sb.Append( " </td><td> " );
sb.Append( " <b> " + Request.PhysicalApplicationPath + " </b> " );
sb.Append( " </td></tr> " );
// System.IO.Path.GetFileName(Request.PhysicalPath)
sb.Append( " <tr><td> " );
sb.Append( " System.IO.Path.GetFileName(Request.PhysicalPath) " );
sb.Append( " </td><td> " );
sb.Append( " <b> " + System.IO.Path.GetFileName(Request.PhysicalPath) + " </b> " );
sb.Append( " </td></tr> " );
// Request.CurrentExecutionFilePath
sb.Append( " <tr><td> " );
sb.Append( " Request.CurrentExecutionFilePath " );
sb.Append( " </td><td> " );
sb.Append( " <b> " + Request.CurrentExecutionFilePath + " </b> " );
sb.Append( " </td></tr> " );
// Request.FilePath
sb.Append( " <tr><td> " );
sb.Append( " Request.FilePath " );
sb.Append( " </td><td> " );
sb.Append( " <b> " + Request.FilePath + " </b> " );
sb.Append( " </td></tr> " );
// Request.Path
sb.Append( " <tr><td> " );
sb.Append( " Request.Path " );
sb.Append( " </td><td> " );
sb.Append( " <b> " + Request.Path + " </b> " );
sb.Append( " </td></tr> " );
// Request.RawUrl
sb.Append( " <tr><td> " );
sb.Append( " Request.RawUrl " );
sb.Append( " </td><td> " );
sb.Append( " <b> " + Request.RawUrl + " </b> " );
sb.Append( " </td></tr> " );
// Request.Url.AbsolutePath
sb.Append( " <tr><td> " );
sb.Append( " Request.Url.AbsolutePath " );
sb.Append( " </td><td> " );
sb.Append( " <b> " + Request.Url.AbsolutePath + " </b> " );
sb.Append( " </td></tr> " );
// Request.Url.AbsoluteUri
sb.Append( " <tr><td> " );
sb.Append( " Request.Url.AbsoluteUri " );
sb.Append( " </td><td> " );
sb.Append( " <b> " + Request.Url.AbsoluteUri + " </b> " );
sb.Append( " </td></tr> " );
// Request.Url.Scheme
sb.Append( " <tr><td> " );
sb.Append( " Request.Url.Scheme " );
sb.Append( " </td><td> " );
sb.Append( " <b> " + Request.Url.Scheme + " </b> " );
sb.Append( " </td></tr> " );
// Request.Url.Host
sb.Append( " <tr><td> " );
sb.Append( " Request.Url.Host " );
sb.Append( " </td><td> " );
sb.Append( " <b> " + Request.Url.Host + " </b> " );
sb.Append( " </td></tr> " );
// Request.Url.Port
sb.Append( " <tr><td> " );
sb.Append( " Request.Url.Port " );
sb.Append( " </td><td> " );
sb.Append( " <b> " + Request.Url.Port + " </b> " );
sb.Append( " </td></tr> " );
// Request.Url.Authority
sb.Append( " <tr><td> " );
sb.Append( " Request.Url.Authority " );
sb.Append( " </td><td> " );
sb.Append( " <b> " + Request.Url.Authority + " </b> " );
sb.Append( " </td></tr> " );
// local Request.Url.LocalPath
sb.Append( " <tr><td> " );
sb.Append( " Request.Url.LocalPath " );
sb.Append( " </td><td> " );
sb.Append( " <b> " + Request.Url.LocalPath + " </b> " );
sb.Append( " </td></tr> " );
// Request.PathInfo
sb.Append( " <tr><td> " );
sb.Append( " Request.PathInfo " );
sb.Append( " </td><td> " );
sb.Append( " <b> " + Request.PathInfo + " </b> " );
sb.Append( " </td></tr> " );
// Request.Url.PathAndQuery
sb.Append( " <tr><td> " );
sb.Append( " Request.Url.PathAndQuery " );
sb.Append( " </td><td> " );
sb.Append( " <b> " + Request.Url.PathAndQuery + " </b> " );
sb.Append( " </td></tr> " );
// Request.Url.Query
sb.Append( " <tr><td> " );
sb.Append( " Request.Url.Query " );
sb.Append( " </td><td> " );
sb.Append( " <b> " + Request.Url.Query + " </b> " );
sb.Append( " </td></tr> " );
// Request.Url.Fragment
// 原則上你應該無法從 Request.Url.Fragment 取得任何資料,因為通常 Browser 不會送出 #toc 這個部分
sb.Append( " <tr><td> " );
sb.Append( " Request.Url.Fragment " );
sb.Append( " </td><td> " );
sb.Append( " <b> " + Request.Url.Fragment + " </b> " );
sb.Append( " </td></tr> " );
// Request.Url.Segments
sb.Append( " <tr> " );
sb.Append( " <td> " );
sb.Append( " Request.Url.Segments " );
sb.Append( " </td> " );
sb.Append( " <td> " );
string [] segments = Request.Url.Segments;
foreach ( string s in segments)
{
sb.Append( " <b> " + s + " </b> " );
sb.Append( " <br/> " );
}
sb.Append( " </td> " );
sb.Append( " </tr> " );
sb.Append( " </table> " );
ltlTable.Text = sb.ToString();
}