ASP.NET 如何取得 Request URL 的各个部分 (转载)
2009-07-30 11:58 Johnny Qian 阅读(610) 评论(0) 编辑 收藏 举报我们在开发Web应用程序,时常需要去解析网址(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 的网址相关的属性与用法:
URL | 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 |
/ 123 |
所以当你看了这张表之后,你还会想用 Request.Url.PathAndQuery.Substring(1, Request.Url.PathAndQuery.IndexOf("/",1)-1) 这种写法吗?
用这样写 Request.Url.Segments[1].Replace("/", "") 不是又短又直觉吗? ^_^
转载自 black¢angel's blog http://www.cnblogs.com/wmh1208/archive/2008/08/28/1278483.html
本文基于知识共享署名 2.5 中国大陆许可协议发布,欢迎转载、演绎或用于商业目的,但是必须保留本文的署名Johnny Qian和链接。