原文: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">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();

    }

Request.url用法的更多相关文章

  1. ASP.NET取得Request URL的各个部分

    我們在開發網頁應用程式,時常需要去解析網址(Request.Url)的每個片段,進行一些判斷.例如說 "http://localhost:1897/News/Press/Content.as ...

  2. nodejs request模块用法

    request是服务端发起请求的工具包 1.安装 npm i request 2.基本用法 默认是GET请求 var request = require('request'); request('您的 ...

  3. ASP.NET中Request.RawUrl、Request.Url的区别

    如果访问的地址是: http://hovertree.com/guestbook/addmessage.aspx?key=hovertree%3C&n=myslider#zonemenu 那么 ...

  4. Request.url请求路径的一些属性

    Request.url请求路径的一些属性1,Request.UrlReferrer.AbsolutePath=获取URL的绝对路径例:"/Manager/Module/OfficialMan ...

  5. Request.IsLocal与Request.Url.IsLoopback的区别

    均在服务器上访问时: http://localhost:17810 Request.IsLocal => trueRequest.Url.IsLoopback => true http:/ ...

  6. css cursor url用法格式详解

    css cursor url用法格式:css:{cursor:url('图标路径'),auto;} //IE,FF,chrome浏览器都可以 实例代码:html{cursor: url("h ...

  7. 转载 ASP.NET中如何取得Request URL的各个部分

    转载原地址 http://blog.miniasp.com/post/2008/02/10/How-Do-I-Get-Paths-and-URL-fragments-from-the-HttpRequ ...

  8. Request url 各种属性值

    網址:http://localhost:1897/News/Press/Content.aspx/123?id=1#toc Request.ApplicationPath / Request.Phys ...

  9. Asp.net中Request.Url的各个属性对应的意义介绍

    Asp.net中Request.Url的各个属性对应的意义介绍 本文转载自 http://www.jb51.net/article/30254.htm 网络上关于Request.Url的说明已经很多也 ...

随机推荐

  1. PNP8550(3.3V DC蜂鸣器) - 原理图系列

    一.截图 watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQveGlhb2Jpbl9ITEo4MA==/font/5a6L5L2T/fontsize/400/fi ...

  2. linux诡异的半连接(SYN_RECV)队列长度

    linux诡异的半连接(SYN_RECV)队列长度(一) >>转载请注明来源:飘零的代码 piao2010 ’s blog,谢谢!^_^>>本文链接地址:linux诡异的半连接 ...

  3. anzhaung

    http://search.newhua.com/search_list.php?searchsid=1&searchname=Setu

  4. 如何判断JDK是32位还是64位

    第一种方法 在CMD窗口中使用java -version 命令进行查看 如果是64位的则会显示 Java HotSpot<TM>64-Bit 字样,32位的则没有类似信息. 注:这是Sun ...

  5. oracle中创建表时添加注释

    CREATE TABLE t1(id varchar2(32) primary key,name VARCHAR2(32) ,age VARCHAR2(32) );comment on column ...

  6. (转)Smarty Foreach 使用说明

    foreach 是除 section 之外处理循环的另一种方案(根据不同需要选择不同的方案). foreach 用于处理简单数组(数组中的元素的类型一致),它的格式比 section 简单许多,缺点是 ...

  7. 关键词:CodeSmith工具、Money类型、__UNKNOWN__

    问题描述: 当数据库列类型有Money类型的时候,CodeSmith生成数据访问层会出错.有不能识别的类型.解决方法: 通过查找资料得知,数据库中的Money类型在DbType中是Currency(货 ...

  8. java中json转xml

    参考:http://heipark.iteye.com/blog/1394844 需要json-lib-2.1-jdk15.jar和xom-1.2.5.jar,maven pom.xml如下: xml ...

  9. 序列化- 使用BinaryFormatter进行序列化

    可以使用属性(Attribute)将类的元素标为可序列化的(Serializable)和不可被序列化的(NonSerialized)..NET中有两个类实现了IFormatter借口的类中的Seria ...

  10. c#读取文件

    你平时是怎么读取文件的?使用流读取.是的没错,C#给我们提供了非常强大的类库(又一次吹捧了.NET一番), 里面封装了几乎所有我们可以想到的和我们没有想到的类,流是读取文件的一般手段,那么你真的会用它 ...