我們在開發網頁應用程式,時常需要去解析網址(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();
    }

注意事項

  • 當程式部署(Deploy)到 IIS 6 之後,假設你的網址是 http://localhost:1897/News/Press/Content.aspx/123? ,IIS 不知為何會將問號 ( ? ) 給刪除掉,以致於 ASP.NET 使用 Request.Url.Query 是空字串!如果你的程式有判斷到這部分時就要特別注意,因為照理說應該會抓到才對!不知道是不是 IIS 6 的 Bug ?

转载于:https://www.cnblogs.com/sofire/archive/2009/11/19/1606408.html

ASP.NET 如何取得 Request URL 的各個部分相关推荐

  1. asp.net中获取当前url的方法

    HttpContext.Current.Request.Url.ToString() 并不可靠. 如果当前URL为 http://localhost/search.aspx?user=http://c ...

  2. 如何在 ASP.NET Core 中使用 URL Rewriting 中间件

    URL rewriting 是根据预先配置好的一组规则去修改 request url,值得注意的是:URL Rewriting 的重写功能和 url 重定向 是两个概念,本篇我们就来讨论下如何在 AS ...

  3. asp.net获取当前页面的url地址

    设当前页完整地址是:http://www.jb51.net/aaa/bbb.aspx?id=5&name=kelli "http://"是协议名 "www.jb5 ...

  4. asp.net 获取访问的url

    2019独角兽企业重金招聘Python工程师标准>>> HttpContext.Current.Request.Url.ToString() 并不可靠. 如果当前URL为 http: ...

  5. asp.net中获取当前url的方法(转)

    HttpContext.Current.Request.Url.ToString() 并不可靠. 如果当前URL为 http://localhost/search.aspx?user=http://c ...

  6. ASP.NET获取请求的url信息汇总

    ASP.NET获取请求的url信息汇总 最近做项目需要处理一个用代码获取当前网站的域名或ip信息的问题,于是尝试了ASP.NET中各种获取url信息的方法,在此总结一下: 在Global.asax文件 ...

  7. ASP.NET 系统对象 Request(一)

    Request对象 用来获取客户端在请求一个页面或传送一个Form是提供的所有信息.它包括用户的HTTP变量.能够识别的浏览器.存储客户端的Cookie信息和请求地址等. Request对象是Syst ...

  8. HttpContext.Current.Request.Url 地址:获取域名

    假设当前页完整地址是:http://www.test.com/aaa/bbb.aspx?id=5&name=kelli 协议名----http:// 域名  ---- www.test.com ...

  9. python request url 转义_Python多线程抓取Google搜索链接网页

    1)urllib2+BeautifulSoup抓取Goolge搜索链接 近期,参与的项目需要对Google搜索结果进行处理,之前学习了Python处理网页相关的工具.实际应用中,使用了urllib2和 ...

最新文章

  1. java 数组降序_Java里的数组降序
  2. threadlocal内存泄露_ThreadLocal原理解析
  3. leetcode算法题--Binary Tree Paths
  4. MemCache详细解读
  5. 简述3032路pcm帧的结构_高级数据链路控制协议-HDLC
  6. eureka client客户端启动时都做了哪些事
  7. 使用LAMP创建基于wordpress的个从博客网站
  8. SpringBoot整合RabbitMQ测试
  9. Spring Caching抽象和Google Guava Cache
  10. (四)揭开数据分析方案的神秘面纱——一案在手,成竹在胸
  11. 自制一个H5图片拖拽、裁剪插件(原生JS)
  12. GEE开发之Landsat8计算MNDWI和数据分析
  13. A股将迎来一大波新经济公司:几家欢喜几家愁
  14. Karma、Jasager与WiFiPineApple之间的关系
  15. 【JavaBigDecimal练习】利用BigDecimal精确计算欧拉数
  16. php工具能自动出代码的,打造自己的PHP半自动化代码审计工具
  17. 什么输入法对计算机英语,电脑怎么把英文输入法设置为默认输入法
  18. Cell Biolabs丨艾美捷Arf1激活检测试剂盒
  19. FROM_UNIXTIME()函数UNIX_TIMESTAMP()函数
  20. 【投资趋势】中国未来最值得投资的十大行业

热门文章

  1. 安装好android的adt以后重启eclipse,但是没有创建AVD的图标
  2. eCos中的线程与同步
  3. 10 个免费的 C/C++ 集成开发环境
  4. RPM包搜索下载网站
  5. 让Mac OS 10.x.x安装在Vmware虚拟机上!
  6. 击败安全系统系列文章之突破卡巴6
  7. windows10环境运用SSH和SwitchySharp自由翱翔
  8. Maven自動化構建工具
  9. 架构设计文章读后感7
  10. mysql主从复制、redis基础、持久化和主从复制