zoukankan      html  css  js  c++  java
  • ASP.NET 取得 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
    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.QueryString["id"] 1

    所以当你看了这张表之后,你还会想用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 ?

  • 相关阅读:
    htb系列-Web Challenges-Console
    htb系列-Web Challenges-FreeLancer
    离散数学1复习要点
    样本均值和总体均值的区别
    chapter7.参数估计
    计算机系统基础复习指北
    C语言学生信息管理系统
    数学的意义
    计算机系统基础第一章
    C语言文件读写的操作
  • 原文地址:https://www.cnblogs.com/jayleke/p/1767413.html
Copyright © 2011-2022 走看看