一 ASP.NET常用路径(path)获取方法与格式对照表

  假设我们的网址为http://localhost:1897/ News/Press/Content.aspx?id=1019

 Browser Request 的网址相关的属性与方法

输出(output)实例

备        

Request.ApplicationPath

/

指的是当前的application(应用程序)的目录

Request.PhysicalPath

D:\Projects\Solution\web\News\Press\Content.aspx

磁盘驱动器代号:\父目录\子目录\Content.aspx

Request.PhysicalApplicationPath

D:\Projects\Solution\web\

磁盘驱动器代号:\父目录\子目录\

Request.CurrentExecutionFilePath

/News/Press/Content.aspx

Request.FilePath

/News/Press/Content.aspx

对应于iis的虚拟目录。

Request.Path

/News/Press/Content.aspx

当前请求的虚拟路径。Path 是 FilePath 和 PathInfo 尾部的串联。*(见下面详细讲解)

Server.MapPath(string url)

例http://www.example.com/1/index.html, 假设你的应用程序在c:/iis/MySite中,那么就是c:/iis/MySite/1/index.html

将url映射为服务器上的物理路径

Request.RawUrl

/News/Press/Content.aspx?id=1019

Request.Url.AbsolutePath

/News/Press /Content.aspx

Request.Url.AbsoluteUri

http://localhost:1897/Content.aspx?id=1019

Request.Url.LocalPath

/News/Press//Content.aspx

Request.Url.PathAndQuery

/News/Press//Content.aspx?id=1019&uu=77

Request.Url.Scheme

http

Request.Url.Host

localhost

Request.Url.Port

1987

Request.Url.Authority

localhost:1897

Request.Url.Query

?id=1019

Request.Url.Query[id]

1019

Request.Url.Fragments

/
News/
Press/
Content.aspx

 

Request.Url.Segments[0]

 

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

D:\Projects\Solution\web\News\Press 

磁盘驱动器代号:\父目录\子目录\ 

 

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

Content.aspx

(接上面*) Request.FilePath, Request.PathInfo, Request.Path, RequestRawUrl

 

  如果请求的地址为http://www.cnblogs.com/default.aspx/books则

Request.FilePath值为http://www.cnblogs.com/default.aspx

Request.PathInfo 值为 /books

Request.Path 值为 http://www.cnblogs.com/default.aspx/books

Request.RawUrl 值为 http://www.cnblogs.com/default.aspx/books

  如果请求地址为http://www.cnblogs.com/defaut.aspx?id=1&name=kk则

Request.FilePath值为http://www.cnblogs.com/default.aspx

Request.PathInfo 值为 ""(空字符串)

Request.Path 值为 http://www.cnblogs.com/default.aspx

Request.RawUrl 值为 http://www.cnblogs.com/default.aspx?id=1&name=kk

  二 Request.ServerVariables集合中获取到的相关信息:

 
  左列是服务器变量名,右侧是值,值是通过Request.ServerVariables[服务器变量名]获取的
APPL_MD_PATH : /LM/W3SVC/894523/Root
APPL_PHYSICAL_PATH : D:\VssWorkFolder\British_School_MIS\src\WebSite\
INSTANCE_META_PATH : /LM/W3SVC/894523
LOCAL_ADDR : 192.168.1.6
PATH_INFO : /SysOption/BillingSetup1.aspx
PATH_TRANSLATED : D:\VssWorkFolder\British_School_MIS\src\WebSite\SysOption\BillingSetup1.aspx
REMOTE_ADDR : 192.168.1.6
REMOTE_HOST : 192.168.1.6
SCRIPT_NAME : /SysOption/BillingSetup1.aspx
SERVER_NAME : 192.168.1.6
URL : /SysOption/BillingSetup1.aspx

  Request.ServerVariables是一个很强大的工具,可以帮助我们获取很多client和web宿主的信息,有兴趣的朋友可以通过以下代码看看它到底包含什么信息

foreach (string s in Request.ServerVariables)
        {
            Response.Write(s + "  :  " + Request.ServerVariables[s] + "<br /><br />");
        }

  三 path转换

 
  1.转换为服务器端路径(Server.MapPath)
web服务器端开发设计一个有趣的问题就是,地址转换。比如http地址/images/a.txt,如果你想在服务器端通过io读取这个文件,就得有这个文件的“本机地址(形如c:\windows\system32\xx.dll)”,这时Server.MapPath就很有用了
Response.Write(Request.MapPath(Request.Path));        输出为 D:\VssWorkFolder\British_School_MIS\src\WebSite\SysOption\BillingSetup1.aspx
2.转换为http地址(Page.ResolveClientUrl Page.ResolveUrl)
Response.Write(Page.ResolveClientUrl("~/a/a.jpg"));      输出为 ../a/a.jpg 
Response.Write(Page.ResolveUrl("~/a/a.jpg"));              输出为 /a/a.jpg

  另外,我们使用upload控件上传文件时,用HttpPostedFile 。例如:

HttpPostedFile file = context.Request.Files[i];//这里的context.Request.Files就是上传的文件集合.

PS:此处乃是利用HttpHandler..在Page页面中可以自己用其它办法多文件上传.

  接着如何保存文件呢?

利用HttpPostedFile的SaveAs方法即可,如: file.SaveAs(SpecifiedPath);

此处的SpecifiedPath是上传文件的绝对路径.

  至于如何获取上传文件的路径.我们可以利用Path类.来操作File.HttpPostedFile类中也包含了文件的基本信息.如文件名,大小,路径等等.Path类操作更齐全而已.接着就可以利用Server.MapPath()方法来进行转换.

  为检验上面的理论,你可以编写一段code跑下就一清二楚啦。例:

StringBuilder req = new StringBuilder();

req.Append("<table cellpadding=3 cellspacing=0 border=1>");

// Request.ApplicationPath

req.Append("<tr><td>");

req.Append("Request.ApplicationPath");

req.Append("</td><td>");

req.Append("<b>" + Request.ApplicationPath + "</b>");

req.Append("</td></tr>");

// Request.PhysicalPath

req.Append("<tr><td>");

req.Append("Request.PhysicalPath");

req.Append("</td><td>");

req.Append("<b>" + Request.PhysicalPath + "</b>");

req.Append("</td></tr>");

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

req.Append("<tr><td>");

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

req.Append("</td><td>");

req.Append("<b>" + System.IO.Path.GetDirectoryName(Request.PhysicalPath) + "</b>");

req.Append("</td></tr>");

// Request.PhysicalApplicationPath

req.Append("<tr><td>");

req.Append("Request.PhysicalApplicationPath");

req.Append("</td><td>");

req.Append("<b>" + Request.PhysicalApplicationPath + "</b>");

req.Append("</td></tr>");

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

req.Append("<tr><td>");

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

req.Append("</td><td>");

req.Append("<b>" + System.IO.Path.GetFileName(Request.PhysicalPath) + "</b>");

req.Append("</td></tr>");

// Request.CurrentExecutionFilePath

req.Append("<tr><td>");

req.Append("Request.CurrentExecutionFilePath");

req.Append("</td><td>");

req.Append("<b>" + Request.CurrentExecutionFilePath + "</b>");

req.Append("</td></tr>");

// Request.FilePath

req.Append("<tr><td>");

req.Append("Request.FilePath");

req.Append("</td><td>");

req.Append("<b>" + Request.FilePath + "</b>");

req.Append("</td></tr>");

// Request.Path

req.Append("<tr><td>");

req.Append("Request.Path");

req.Append("</td><td>");

req.Append("<b>" + Request.Path + "</b>");

req.Append("</td></tr>");

// Request.RawUrl

req.Append("<tr><td>");

req.Append("Request.RawUrl");

req.Append("</td><td>");

req.Append("<b>" + Request.RawUrl + "</b>");

req.Append("</td></tr>");

// Request.Url.AbsolutePath

req.Append("<tr><td>");

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

req.Append("</td><td>");

req.Append("<b>" + Request.Url.AbsolutePath + "</b>");

req.Append("</td></tr>");

// Request.Url.AbsoluteUri

req.Append("<tr><td>");

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

req.Append("</td><td>");

req.Append("<b>" + Request.Url.AbsoluteUri + "</b>");

req.Append("</td></tr>");

// Request.Url.Scheme

req.Append("<tr><td>");

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

req.Append("</td><td>");

req.Append("<b>" + Request.Url.Scheme + "</b>");

req.Append("</td></tr>");

// Request.Url.Host

req.Append("<tr><td>");

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

req.Append("</td><td>");

req.Append("<b>" + Request.Url.Host + "</b>");

req.Append("</td></tr>");

// Request.Url.Port

req.Append("<tr><td>");

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

req.Append("</td><td>");

req.Append("<b>" + Request.Url.Port + "</b>");

req.Append("</td></tr>");

// Request.Url.Authority

req.Append("<tr><td>");

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

req.Append("</td><td>");

req.Append("<b>" + Request.Url.Authority + "</b>");

req.Append("</td></tr>");

// local Request.Url.LocalPath

req.Append("<tr><td>");

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

req.Append("</td><td>");

req.Append("<b>" + Request.Url.LocalPath + "</b>");

req.Append("</td></tr>");

// Request.PathInfo

req.Append("<tr><td>");

req.Append("Request.PathInfo");

req.Append("</td><td>");

req.Append("<b>" + Request.PathInfo + "</b>");

req.Append("</td></tr>");

// Request.Url.PathAndQuery

req.Append("<tr><td>");

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

req.Append("</td><td>");

req.Append("<b>" + Request.Url.PathAndQuery + "</b>");

req.Append("</td></tr>");

// Request.Url.Query

req.Append("<tr><td>");

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

req.Append("</td><td>");

req.Append("<b>" + Request.Url.Query + "</b>");

req.Append("</td></tr>");

// Request.Url.Fragment

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

req.Append("<tr><td>");

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

req.Append("</td><td>");

req.Append("<b>" + Request.Url.Fragment + "</b>");

req.Append("</td></tr>");

// Request.Url.Segments

req.Append("<tr>");

req.Append("<td>");

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

req.Append("</td>");

req.Append("<td>");

string[] segments = Request.Url.Segments;

foreach (string s in segments)

{

req.Append("<b>" + s + "</b>");

req.Append("<p>");

}

req.Append("</td>");

req.Append("</tr>");

req.Append("</table>");

Response.Write(req.ToString());

参考的文章:
http://blog.miniasp.com/post/2008/02/10/How-Do-I-Get-Paths-and-URL-fragments-from-the-HttpRequest-object.aspx

http://www.cnblogs.com/zyip/archive/2009/08/13/1544968.html

如有错误,请不吝指出。

另加上一个实例:

// Builds an absolute URL
  private static string BuildAbsolute(string relativeUri)
  {
    // get current uri
    Uri uri = HttpContext.Current.Request.Url;
    // build absolute path
    string app = HttpContext.Current.Request.ApplicationPath;
    if (!app.EndsWith("/")) app += "/";
    relativeUri = relativeUri.TrimStart('/');
    // return the absolute path
    return HttpUtility.UrlPathEncode(
      String.Format("http://{0}:{1}{2}{3}",
      uri.Host, uri.Port, app, relativeUri));
  }

ASP.NET中的路径(path) 详解的更多相关文章

  1. Asp.net中web.config配置文件详解(一)

    本文摘自Asp.net中web.config配置文件详解 web.config是一个XML文件,用来储存Asp.NET Web应用程序的配置信息,包括数据库连接字符.身份安全验证等,可以出现在Asp. ...

  2. ASP.NET 中 OutputCache 指令参数详解

    使用@ OutputCache指令使用@ OutputCache指令,能够实现对页面输出缓存的一般性需要.@ OutputCache指令在ASP.NET页或者页中包含的用户控件的头部声明.这种方式非常 ...

  3. 转载 asp.net中ViewState的用法详解

    转载原地址: http://www.jb51.net/article/73662.htm 在web窗体控件设置为runat = "server",这个控件会被附加一个隐藏的属性_V ...

  4. Asp.net中web.config配置文件详解(二)

    摘自http://blog.csdn.net/hbqhdlc/article/details/8155668 近日正在看Asp.net,看到Web.config有很不清楚之处,特意从网络.MSDN搜集 ...

  5. Asp.net中web.config配置文件详解

    Web.config文件是一个XML文本文件,它用来储存 ASP.NET Web 应用程序的配置信息(如最常用的设置ASP.NET Web 应用程序的身份验证方式),它可以出现在应用程序的每一个目录中 ...

  6. Eclipse中的build path详解

    http://blog.csdn.net/qqqqqq654/article/details/53043742

  7. VS2010 Chart控件(一)Chart控件在ASP.NET网站中的应用示例详解(C#语言)

    步骤如下: 1. Chart控件(一)Chart控件在ASP.NET网站中的应用示例详解(C#语言)" title="VS2010 Chart控件(一)Chart控件在ASP.NE ...

  8. C#中web.config文件详解

    C#中web.config文件详解 一.认识Web.config文件 Web.config 文件是一个XML文本文件,它用来储存 ASP.NET Web 应用程序的配置信息(如最常用的设置ASP.NE ...

  9. Oracle Statspack报告中各项指标含义详解~~学习性能必看!!!

    Oracle Statspack报告中各项指标含义详解~~学习性能必看!!! Data Buffer Hit Ratio#<#90# 数据块在数据缓冲区中的命中率,通常应该在90%以上,否则考虑 ...

随机推荐

  1. 要点Java17 String

    字符串广泛应用在Java编程中,在Java中字符串属于对象,Java提供了String类来创建和操作字符串. 创建字符串 创建字符串最简单的方式例如以下: String greeting = &quo ...

  2. 基于Vue 和 webpack的项目实现

    Vue.js 是一款极简的 mvvm 框架,如果让我用一个词来形容它,就是 “轻·巧” .如果用一句话来描述它,它能够集众多优秀逐流的前端框架之大成,但同时保持简单易用.废话不多说,来看几个例子: & ...

  3. apache的keepalive和keepalivetimeout

    在APACHE的httpd.conf中,KeepAlive指的是保持连接活跃,类似于Mysql的永久连接.换一句话说,如果将KeepAlive设置为On,那么来自同一客户端的请求就不需要再一次连接,避 ...

  4. 第002篇 深入体验C#项目开发(一)

    网上摘来的简介:        <深入体验C#项目开发>通过10个综合实例的实现过程,详细讲解了C#在实践项目中的综合运用过程.这些项目从作者的学生时代写起,到项目经理结束,一直贯穿于作者 ...

  5. ffmpeg的使用

    -i "转换前的视频绝对路径\文件名.mp4" -movflags faststart+rtphint "转换后的视频绝对路径\文件名.mp4" 上面这条语句是 ...

  6. 在linq查询环境下通过sql语句来访问数据库

    接上一篇随笔 这里主要介绍在linq环境下,如果实现用sql来访问数据库,同时也介绍在EF框架中如何添加新的方法来访问数据库. 1.首先,在数据访问层(EF.DAO,EF.IDAO)中添加具体的函数来 ...

  7. WebConfig配置 文件加密处理

    webconfig 文件加密处理   前几日正好遇到配置文件加密解密的问题,简单记录下流程. 1.首先运行cmd然后打开Framework.cd C:\Windows\Microsoft.NET\Fr ...

  8. rotate.js实现图片旋转 (chrome,IE,firefox都可以实现)

    找了好多资料,要么是IE可以用,但是谷歌不行,,还有就是两个都可以用的,图片大小显示不全.终于找到一个好一点的js,先贴一下代码. 1.rotate.js jQuery.fn.rotate = fun ...

  9. Spring的注解学习(ioc,aop结合)

    首先引入jar包 aspectjrt.jar aspectjweaver.jar 1.dao package com.dao; public interface OkpDao { public voi ...

  10. JVM GC之一找出不可达对象并回收

    JAVA运行时数据区域 1.程序计数器:当前线程所执行的字节码的行号指示器.一个处理器只会执行一条线程中的指令,为了线程切换后能回复到正确的执行位置,所以每条线程都需要一个独立的计数器.各条线程之间互 ...