ASP.NET 如何取得 Request URL 的各个部分-新闻详情

ASP.NET 如何取得 Request URL 的各个部分


发布时间:2016-06-21责任编辑:朱明 浏览:2773


我们在开发网页应用程序,时常需要去解析网址(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:ProjectsSolutionwebNewsPressContent.aspx

System.IO.Path.GetDirectoryName(Request.PhysicalPath) D:ProjectsSolutionwebNewsPress

Request.PhysicalApplicationPath D:ProjectsSolutionweb

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("

");

 

        sb.Append("

");

        sb.Append("网址:"        sb.Append(""); ");

 

        // Request.ApplicationPath

        sb.Append("

");

        sb.Append("Request.ApplicationPath");

        sb.Append("

");

        sb.Append("" + Request.ApplicationPath + "");

        sb.Append("");

 

        // Request.PhysicalPath

        sb.Append("

");

        sb.Append("Request.PhysicalPath");

        sb.Append("

");

        sb.Append("" + Request.PhysicalPath + "");

        sb.Append("");

 

        // System.IO.Path.GetDirectoryName(Request.PhysicalPath)

        sb.Append("

");

        sb.Append("System.IO.Path.GetDirectoryName(Request.PhysicalPath)");

        sb.Append("

");

        sb.Append("" + System.IO.Path.GetDirectoryName(Request.PhysicalPath) + "");

        sb.Append("");

 

        // Request.PhysicalApplicationPath

        sb.Append("

");

        sb.Append("Request.PhysicalApplicationPath");

        sb.Append("

");

        sb.Append("" + Request.PhysicalApplicationPath + "");

        sb.Append("");

 

        // System.IO.Path.GetFileName(Request.PhysicalPath)

        sb.Append("

");

        sb.Append("System.IO.Path.GetFileName(Request.PhysicalPath)");

        sb.Append("

");

        sb.Append("" + System.IO.Path.GetFileName(Request.PhysicalPath) + "");

        sb.Append("");

 

        // Request.CurrentExecutionFilePath

        sb.Append("

");

        sb.Append("Request.CurrentExecutionFilePath");

        sb.Append("

");

        sb.Append("" + Request.CurrentExecutionFilePath + "");

        sb.Append("");

 

        // Request.FilePath

        sb.Append("

");

        sb.Append("Request.FilePath");

        sb.Append("

");

        sb.Append("" + Request.FilePath + "");

        sb.Append("");

 

        // Request.Path

        sb.Append("

");

        sb.Append("Request.Path");

        sb.Append("

");

        sb.Append("" + Request.Path + "");

        sb.Append("");

 

        // Request.RawUrl

        sb.Append("

");

        sb.Append("Request.RawUrl");

        sb.Append("

");

        sb.Append("" + Request.RawUrl + "");

        sb.Append("");

 

        // Request.Url.AbsolutePath

        sb.Append("

");

        sb.Append("Request.Url.AbsolutePath");

        sb.Append("

");

        sb.Append("" + Request.Url.AbsolutePath + "");

        sb.Append("");

 

        // Request.Url.AbsoluteUri

        sb.Append("

");

        sb.Append("Request.Url.AbsoluteUri");

        sb.Append("

");

        sb.Append("" + Request.Url.AbsoluteUri + "");

        sb.Append("");

 

        // Request.Url.Scheme

        sb.Append("

");

        sb.Append("Request.Url.Scheme");

        sb.Append("

");

        sb.Append("" + Request.Url.Scheme + "");

        sb.Append("");

 

        // Request.Url.Host

        sb.Append("

");

        sb.Append("Request.Url.Host");

        sb.Append("

");

        sb.Append("" + Request.Url.Host + "");

        sb.Append("");

 

        // Request.Url.Port

        sb.Append("

");

        sb.Append("Request.Url.Port");

        sb.Append("

");

        sb.Append("" + Request.Url.Port + "");

        sb.Append("");

 

        // Request.Url.Authority

        sb.Append("

");

        sb.Append("Request.Url.Authority");

        sb.Append("

");

        sb.Append("" + Request.Url.Authority + "");

        sb.Append("");

 

        // local Request.Url.LocalPath

        sb.Append("

");

        sb.Append("Request.Url.LocalPath");

        sb.Append("

");

        sb.Append("" + Request.Url.LocalPath + "");

        sb.Append("");

 

        // Request.PathInfo

        sb.Append("

");

        sb.Append("Request.PathInfo");

        sb.Append("

");

        sb.Append("" + Request.PathInfo + "");

        sb.Append("");

 

        // Request.Url.PathAndQuery

        sb.Append("

");

        sb.Append("Request.Url.PathAndQuery");

        sb.Append("

");

        sb.Append("" + Request.Url.PathAndQuery + "");

        sb.Append("");

 

        // Request.Url.Query

        sb.Append("

");

        sb.Append("Request.Url.Query");

        sb.Append("

");

        sb.Append("" + Request.Url.Query + "");

        sb.Append("");

 

        // Request.Url.Fragment

        // 原则上你应该无法从 Request.Url.Fragment 取得任何数据,因为通常 Browser 不会送出 #toc 这个部分

        sb.Append("

");

        sb.Append("Request.Url.Fragment");

        sb.Append("

");

        sb.Append("" + Request.Url.Fragment + "");

        sb.Append("");

 

        // Request.Url.Segments

        sb.Append("

");

        sb.Append("

");

        sb.Append("Request.Url.Segments");

        sb.Append("");

        sb.Append("

");

        string[] segments = Request.Url.Segments;

        foreach (string s in segments)

        {

            sb.Append("" + s + "");

            sb.Append("
");

        }

        sb.Append("");

        sb.Append("");

 

        sb.Append("");

 

        ltlTable.Text = sb.ToString();

    }



德胜工作室