ASP.NET 如何取得 Request URL 的各個部分
来源:互联网 发布:csol频繁网络问题 编辑:程序博客网 时间:2024/05/16 11:11
如何获取上一个页面的URL
HttpContext.Current.Request.UrlReferrer
我們在開發網頁應用程式,時常需要去解析網址(Request.Url)的每個片段,進行一些判斷。例如說 "http://localhost:1897/News/Press/Content.aspx/123?id=1#toc",我們想要取得網址裡第一層目錄的名字(News)用以判斷不同的頁面標題(Page Title)。
我看很多人都用字串的 IndexOf 方法與 Substring 方法:
[code:c#]
Request.Url.PathAndQuery.Substring(1, Request.Url.PathAndQuery.IndexOf("/", 1)-1)
[/code]
這實在太埋沒 .NET 的強大設計了,事實上在 Request 物件就已經提供很多方便的屬性(Property)可供取得網址的片段。
底下這張表就是各種跟 Browser Request 的網址相關的屬性與用法: 網址:http://localhost:1897/News/Press/Content.aspx/123?id=1#tocRequest.ApplicationPath/Request.PhysicalPathD:\Projects\Solution\web\News\Press\Content.aspxSystem.IO.Path.GetDirectoryName(Request.PhysicalPath)D:\Projects\Solution\web\News\PressRequest.PhysicalApplicationPathD:\Projects\Solution\web\System.IO.Path.GetFileName(Request.PhysicalPath)Content.aspxRequest.CurrentExecutionFilePath/News/Press/Content.aspxRequest.FilePath/News/Press/Content.aspxRequest.Path/News/Press/Content.aspx/123Request.RawUrl/News/Press/Content.aspx/123?id=1Request.Url.AbsolutePath/News/Press/Content.aspx/123Request.Url.AbsoluteUrihttp://localhost:1897/News/Press/Content.aspx/123?id=1Request.Url.SchemehttpRequest.Url.HostlocalhostRequest.Url.Port1897Request.Url.Authoritylocalhost:1897Request.Url.LocalPath/News/Press/Content.aspx/123Request.PathInfo/123Request.Url.PathAndQuery/News/Press/Content.aspx/123?id=1Request.Url.Query?id=1Request.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();}
注意事項
- 當程式部署(Deploy)到 IIS 6 之後,假設你的網址是 http://localhost:1897/News/Press/Content.aspx/123? ,IIS 不知為何會將問號 ( ? ) 給刪除掉,以致於 ASP.NET 使用 Request.Url.Query 是空字串!如果你的程式有判斷到這部分時就要特別注意,因為照理說應該會抓到才對!不知道是不是 IIS 6 的 Bug ?
阅读原文
阅读全文
0 0
- ASP.NET 如何取得 Request URL 的各個部分?
- ASP.NET 如何取得 Request URL 的各個部分
- ASP.NET 如何取得 Request URL 的各個部分
- ASP.NET 如何取得 Request URL 的各个部分
- ASP.NET 如何取得 Request URL 的各个部分
- ASP.NET 如何取得 Request URL 的各个部分
- ASP.NET 如何取得 Request URL 的各个部分
- ASP.NET 如何取得 Request URL 的各个部分
- ASP.NET取得Request URL的各个部分
- ASP.NET 取得 Request URL 的各个部分和通过ASP.NET获取URL地址的方法
- ASP.NET 取得 Request URL 的各个部分和通过ASP.NET获取URL地址的方法
- ASP.NET 取得 Request URL 的各个部分和通过ASP.NET获取URL地址的方法
- ASP.NET 取得 Request URL 的各个部分和通过ASP.NET获取URL地址的方法
- ASP.NET取得Request URL 值
- asp.net request获取url各个部分
- asp.net用requst取得文件名及URL 的各个部分
- ASP.NET中Request.RawUrl、Request.Url的区别
- ASP.NET 有关Request.Url
- Python3.X中的条件控制
- BZOJ 4498 魔法的碰撞
- Copy Objects to Layer
- 垃圾收集器简介
- 自适应学习率算法.基于阿米霍步长准则的线性回溯搜索算法
- ASP.NET 如何取得 Request URL 的各個部分
- Elasticsearch基础教程
- popWindow的应用与分析
- [Unity&C#]输入任意按键返回对应的字符串
- jsp,从数据库取数据乱码
- android 自定义TextView,设置DrawableLeft图片的大小
- Vuforia的学习(三) Vuforia ARCamer的使用
- hdu 5726 gcd rmq 求相同gcd的区间数量
- 算法题目-二叉树的层序遍历