原文标题:How Do I Get Paths and URL fragments from the HttpRequest object?
原文地址:http://www.cambiaresearch.com/articles/53/how-do-i-get-paths-and-url-fragments-from-the-httprequest-object
摘要
如果你已经编写了许多ASP.NET程序,你或许曾花费大量时间将Url映射到物理磁盘的某个位置。当你需要在服务器上保存文件的时候,或者执行某些URL解析、或者将请求重新路由,你都需要做这些工作。
这篇文章将要解释Request对象的一些属性,这些属性根据应用程序和当前请求来提供路径和url信息。
首先,这里有两张表来展示针对给出的请求路径,Request对象的相关属性的值。
由于某些我也不清楚的原因,Url.Fragment属性通常是空的,而不是包含"#fragment"的值。
请求路径: http://localhost:96/Cambia3/Temp/Test.aspx?q=item#fragment
Some HttpRequest path and URL properties: | |
Request.ApplicationPath: | /Cambia3 |
Request.CurrentExecutionFilePath: | /Cambia3/Temp/Test.aspx |
Request.FilePath: | /Cambia3/Temp/Test.aspx |
Request.Path: | /Cambia3/Temp/Test.aspx |
Request.PathInfo: | |
Request.PhysicalApplicationPath: | D:\Inetpub\wwwroot\CambiaWeb\Cambia3\ |
Request.RawUrl: | /Cambia3/Temp/Test.aspx?query=arg |
Request.Url.AbsolutePath: | /Cambia3/Temp/Test.aspx |
Request.Url.AbsoluteUri: | http://localhost:96/Cambia3/Temp/Test.aspx?query=arg |
Request.Url.Fragment: | |
Request.Url.Host: | localhost |
Request.Url.Authority: | localhost:96 |
Request.Url.LocalPath: | /Cambia3/Temp/Test.aspx |
Request.Url.PathAndQuery: | /Cambia3/Temp/Test.aspx?query=arg |
Request.Url.Port: | 96 |
Request.Url.Query: | ?query=arg |
Request.Url.Scheme: | http |
Request.Url.Segments: | / Cambia3/ Temp/ Test.aspx |
请求的路径: http://localhost:96/Cambia3/Temp/Test.aspx/path/info?q=item#fragment
Some HttpRequest path and URL properties: | |
Request.ApplicationPath: | /Cambia3 |
Request.CurrentExecutionFilePath: | /Cambia3/Temp/Test.aspx |
Request.FilePath: | /Cambia3/Temp/Test.aspx |
Request.Path: | /Cambia3/Temp/Test.aspx/path/info |
Request.PathInfo: | /path/info |
Request.PhysicalApplicationPath: | D:\Inetpub\wwwroot\CambiaWeb\Cambia3\ |
Request.RawUrl: | /Cambia3/Temp/Test.aspx/path/info?query=arg |
Request.Url.AbsolutePath: | /Cambia3/Temp/Test.aspx/path/info |
Request.Url.AbsoluteUri: | http://localhost:96/Cambia3/Temp/Test.aspx/path/info?query=arg |
Request.Url.Fragment: | |
Request.Url.Host: | localhost |
Request.Url.LocalPath: | /Cambia3/Temp/Test.aspx/path/info |
Request.Url.PathAndQuery: | /Cambia3/Temp/Test.aspx/path/info?query=arg |
Request.Url.Port: | 96 |
Request.Url.Query: | ?query=arg |
Request.Url.Scheme: | http |
Request.Url.Segments: | / Cambia3/ Temp/ Test.aspx/ path/ info |
下面是我用C#写的一个方法,用来处理URL并且生成表格。你可以在一个aspx页面中加入一个ID为"lblOutput"的Label控件,然后使用这个方法。
private void DisplayRequestObjectProperties()
{
lblOutput.Text = "<table cellpadding=2 border=1>";
lblOutput.Text += "<tr><td colspan=2 align=center>";
lblOutput.Text += "Some HttpRequest path and ULR properties:";
lblOutput.Text += "</td></tr>";
// application path
lblOutput.Text += "<tr><td>";
lblOutput.Text += "Request.ApplicationPath:";
lblOutput.Text += "</td><td>";
lblOutput.Text += "<b>" + Request.ApplicationPath + "</b>";
lblOutput.Text += "</td></tr>";
// current execution file path
lblOutput.Text += "<tr><td>";
lblOutput.Text += "Request.CurrentExecutionFilePath:";
lblOutput.Text += "</td><td>";
lblOutput.Text += "<b>" + Request.CurrentExecutionFilePath + "</b>";
lblOutput.Text += "</td></tr>";
// file path
lblOutput.Text += "<tr><td>";
lblOutput.Text += "Request.FilePath:";
lblOutput.Text += "</td><td>";
lblOutput.Text += "<b>" + Request.FilePath + "</b>";
lblOutput.Text += "</td></tr>";
// path
lblOutput.Text += "<tr><td>";
lblOutput.Text += "Request.Path:";
lblOutput.Text += "</td><td>";
lblOutput.Text += "<b>" + Request.Path + "</b>";
lblOutput.Text += "</td></tr>";
// path info
lblOutput.Text += "<tr><td>";
lblOutput.Text += "Request.PathInfo:";
lblOutput.Text += "</td><td>";
lblOutput.Text += "<b>" + Request.PathInfo + "</b>";
lblOutput.Text += "</td></tr>";
// physical application path
lblOutput.Text += "<tr><td>";
lblOutput.Text += "Request.PhysicalApplicationPath:";
lblOutput.Text += "</td><td>";
lblOutput.Text += "<b>" + Request.PhysicalApplicationPath + "</b>";
lblOutput.Text += "</td></tr>";
// raw url
lblOutput.Text += "<tr><td>";
lblOutput.Text += "Request.RawUrl:";
lblOutput.Text += "</td><td>";
lblOutput.Text += "<b>" + Request.RawUrl + "</b>";
lblOutput.Text += "</td></tr>";
// absolute path
lblOutput.Text += "<tr><td>";
lblOutput.Text += "Request.Url.AbsolutePath:";
lblOutput.Text += "</td><td>";
lblOutput.Text += "<b>" + Request.Url.AbsolutePath + "</b>";
lblOutput.Text += "</td></tr>";
// absolute uri
lblOutput.Text += "<tr><td>";
lblOutput.Text += "Request.Url.AbsoluteUri:";
lblOutput.Text += "</td><td>";
lblOutput.Text += "<b>" + Request.Url.AbsoluteUri + "</b>";
lblOutput.Text += "</td></tr>";
// fragment
lblOutput.Text += "<tr><td>";
lblOutput.Text += "Request.Url.Fragment:";
lblOutput.Text += "</td><td>";
lblOutput.Text += "<b>" + Request.Url.Fragment + "</b>";
lblOutput.Text += "</td></tr>";
// host
lblOutput.Text += "<tr><td>";
lblOutput.Text += "Request.Url.Host:";
lblOutput.Text += "</td><td>";
lblOutput.Text += "<b>" + Request.Url.Host + "</b>";
lblOutput.Text += "</td></tr>";
// authority
lblOutput.Text += "<tr><td>";
lblOutput.Text += "Request.Url.Authority:";
lblOutput.Text += "</td><td>";
lblOutput.Text += "<b>" + Request.Url.Authority + "</b>";
lblOutput.Text += "</td></tr>";
// local path
lblOutput.Text += "<tr><td>";
lblOutput.Text += "Request.Url.LocalPath:";
lblOutput.Text += "</td><td>";
lblOutput.Text += "<b>" + Request.Url.LocalPath + "</b>";
lblOutput.Text += "</td></tr>";
// path and query
lblOutput.Text += "<tr><td>";
lblOutput.Text += "Request.Url.PathAndQuery:";
lblOutput.Text += "</td><td>";
lblOutput.Text += "<b>" + Request.Url.PathAndQuery + "</b>";
lblOutput.Text += "</td></tr>";
// port
lblOutput.Text += "<tr><td>";
lblOutput.Text += "Request.Url.Port:";
lblOutput.Text += "</td><td>";
lblOutput.Text += "<b>" + Request.Url.Port + "</b>";
lblOutput.Text += "</td></tr>";
// query
lblOutput.Text += "<tr><td>";
lblOutput.Text += "Request.Url.Query:";
lblOutput.Text += "</td><td>";
lblOutput.Text += "<b>" + Request.Url.Query + "</b>";
lblOutput.Text += "</td></tr>";
// scheme
lblOutput.Text += "<tr><td>";
lblOutput.Text += "Request.Url.Scheme:";
lblOutput.Text += "</td><td>";
lblOutput.Text += "<b>" + Request.Url.Scheme + "</b>";
lblOutput.Text += "</td></tr>";
// segments
lblOutput.Text += "<tr><td>";
lblOutput.Text += "Request.Url.Segments:";
lblOutput.Text += "</td><td>";
string[] segments = Request.Url.Segments;
foreach (string s in segments)
lblOutput.Text += "<b>" + s + "</b><br>";
lblOutput.Text += "</td></tr>";
lblOutput.Text += "</table>";
}