原文: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. AlgorithmVisualizer

    http://jasonpark.me/AlgorithmVisualizer/#path=graph_search/floyd_warshall/shortest_paths

  2. 进程的优先级 与 CFS 进程调度

    在Linux下改变进程的优先级 作者:曾老师,华清远见嵌入式学院讲师. 作为多任务的操作系统,Linux内核为每个创建的进程分配时间片并根据其优先级进行调度.当进程被创建时,其对应的task_stru ...

  3. Understanding JTS--reference

    Part I-An introduction to transactions If you look at any introductory article or book on J2EE, you' ...

  4. 自定义控件(视图)2期笔记10:自定义视图之View事件分发机制("瀑布流"的案例)

    1. Touch事件的传递:   图解Touch事件的传递,如下: 当我们点击子View 02内部的Button控件时候,我们就触发了Touch事件. • 这个Touch事件首先传递给了顶级父View ...

  5. struts_ognl详解

  6. U3D 背景音效和事件触发音效

    首先,想要在一个游戏添加背景音乐其实很简单,就是利用一个组件 就能够实现音频的播放,不过要实现通过某一个事件,来进行声音的播放,比如跳跃啊什么的: public AudioClip jumpclips ...

  7. idea+maven

    使用IntelliJ IDEA开发SpringMVC网站(一)开发环境 http://my.oschina.net/gaussik/blog/385697 使用IntelliJ IDEA开发Sprin ...

  8. Core Animation之CAKeyframeAnimation

    在上一篇专题文章中我们学习了iOS核心动画CoreAnimation中CABasicAnimation动画的使用方法.CABasicAnimation已经可以应付一些比较简单的应用场景了,比如view ...

  9. Using GUID to generate the unique file name in C#

    GUID, the abbreviation of "Global Unique Identifier", is a unique reference number used as ...

  10. JS获取屏幕各种高

    <script language="javascript"> var h = ""; h += " 网页可见区域宽:"+ doc ...