获取Request URL的各个部分的写法

 

我们在开发网页应用程式,时常需要去解析网址(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("/", "") 不是又短又直觉吗? ^_^

 以下是产生以上表格的代码:

 

代码
protected void Page_Load(object sender, EventArgs e)


    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();
}

 

 

 

 

posted @ 2011-01-24 16:07  simonfan  阅读(683)  评论(0编辑  收藏  举报