ASP.NET中的路径(path) 详解
一 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 |
/ |
|
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) 详解的更多相关文章
- Asp.net中web.config配置文件详解(一)
本文摘自Asp.net中web.config配置文件详解 web.config是一个XML文件,用来储存Asp.NET Web应用程序的配置信息,包括数据库连接字符.身份安全验证等,可以出现在Asp. ...
- ASP.NET 中 OutputCache 指令参数详解
使用@ OutputCache指令使用@ OutputCache指令,能够实现对页面输出缓存的一般性需要.@ OutputCache指令在ASP.NET页或者页中包含的用户控件的头部声明.这种方式非常 ...
- 转载 asp.net中ViewState的用法详解
转载原地址: http://www.jb51.net/article/73662.htm 在web窗体控件设置为runat = "server",这个控件会被附加一个隐藏的属性_V ...
- Asp.net中web.config配置文件详解(二)
摘自http://blog.csdn.net/hbqhdlc/article/details/8155668 近日正在看Asp.net,看到Web.config有很不清楚之处,特意从网络.MSDN搜集 ...
- Asp.net中web.config配置文件详解
Web.config文件是一个XML文本文件,它用来储存 ASP.NET Web 应用程序的配置信息(如最常用的设置ASP.NET Web 应用程序的身份验证方式),它可以出现在应用程序的每一个目录中 ...
- Eclipse中的build path详解
http://blog.csdn.net/qqqqqq654/article/details/53043742
- VS2010 Chart控件(一)Chart控件在ASP.NET网站中的应用示例详解(C#语言)
步骤如下: 1. Chart控件(一)Chart控件在ASP.NET网站中的应用示例详解(C#语言)" title="VS2010 Chart控件(一)Chart控件在ASP.NE ...
- C#中web.config文件详解
C#中web.config文件详解 一.认识Web.config文件 Web.config 文件是一个XML文本文件,它用来储存 ASP.NET Web 应用程序的配置信息(如最常用的设置ASP.NE ...
- Oracle Statspack报告中各项指标含义详解~~学习性能必看!!!
Oracle Statspack报告中各项指标含义详解~~学习性能必看!!! Data Buffer Hit Ratio#<#90# 数据块在数据缓冲区中的命中率,通常应该在90%以上,否则考虑 ...
随机推荐
- Java有用经验总结--Swing篇
Java有用经验总结--Swing篇 前言 本文前言部分为我的一些感想,假设你仅仅对本文介绍的Java有用技巧感兴趣,能够跳过前言直接看正文的内容. 本文的写作动机来源于近期接给人家帮忙写的一个小程序 ...
- java学习之Date的使用
Date使用,主要要注意将日期格式化,否则返回的是系统默认的格式.请自己查阅API文档. import java.util.*; import java.text.*; public class Te ...
- phantomjs API
phantomjs使用说明 phantomjs实现了一个无界面的webkit浏览器.虽然没有界面,但dom渲染.js运行.网络访问.canvas/svg绘制等功能都很完备,在页面抓取. ...
- 关于Storyboard
界面的搭建器IB有两种 1.stroyboard (不仅可以搭建界面 并且可以实现界面之间的关系) 2.xib (只能是单个视图或者界面) 如何配置自己创建的storyboard 1.infoPlis ...
- OC——NSDictionary和NSMutableDictionary
//初始化 NSString *key1 = @"key1"; NSString *key2 = @"key2"; NSString *key3 = @&quo ...
- react学习之props
中秋过后刚好结束在上一家公司的工作,明天开始要正式的找工作了,最近也投了几家公司收到几分面试邀请.在面试的过程中几个面试官聊到了react(当然也有聊了vue,angular).感觉不懂react都不 ...
- AngularJs中关于ng-class的三种使用方式说明
在开发中我们通常会遇到一种需求:一个元素在不同的状态需要展现不同的样子. 而在这所谓的样子当然就是改变其css的属性,而实现能动态的改变其属性值,必然只能是更换其class属性 这里有三种方法: 第一 ...
- 简单的JQuery top返回顶部
一个最简单的JQuery Top返回的代码,Mark一下: HTML如下: <div id="backtop"> <a href="javascript ...
- 自动化高效css开发,畅谈less的灵活变化
css是一种让html与样式分离解析而出现的代码,它的出现大大提高了程序员的工作效率,和后期进行维护的效率.但是发展至今,由于起死板单调的写法,越来越不能满足程序员们灵活的思维,很多时候是种恨铁不成钢 ...
- springmvc+mybatis如何分层
通常情况下,我们之间调用mapper,spring会为我们注入其实现,很方便,mybatis也提供了一个generator供我们生成bean.dao接口等.但是总有一种感觉叫不爽,感觉除了bean和m ...