ASP.NET URL路径问题
ASP.NET URL路径问题
ASP.NET URL路径问题
一、关于相对路径和绝对路径
相对路径转绝对路径
一般,我们在ASP.NET网站中往往需要把一个相对路径转化为绝对路径。通常是用Server.MapPath()方法。比如网站根目录下有 个"Uploads"文件夹,那么我们调用Server.MapPath("Uploads")就会返回这个文件夹在服务器上的绝对路径,比如 D:\Web1\Uploads。
另一种方法是使用HttpRuntime.AppDomainAppPath,它读取的就是当前网站的运行目录。
关于波浪线 ~ :
如果在路径前加上波浪线“~”则表示从网站根目录出发的相对路径。这在引用图片、CSS的时候比较常用。比如“~\Images”。并且这个路径同样可以传给Server.MapPath()用来返回绝对路径。
总是从网站跟目录出发:
在某些场合下,比如网站使用了URL重写组件(注意,不是指MVC网站),则会引发一些路径上的问题。比如网站根目录下有个页面,而URL重写中的配置为静态HTML页面,这样就多了两个路径。在引用资源文件的时候会有问题。一 种是在后台代码里用“~\”来获取根目录,或者用ResolveUrl()方法。但其实最高效和简洁的写法是直接使用一个“/”来表示根目录。比如<img src="/ 图片URL">,则不管这个标记在哪个页面下,它总能找到根目录下的Images文件夹下的shit.png。
二、斜杠和反斜杠
URL使用的是“/”,所以在处理URL(解析和转向)的时候,都得给用户返回“/”这个方向的斜杠。其中
“/”来表示根目录。
./ 当前目录。
../ 相对当前目录的上层目录。
Windows中使用的是“\”,因此在做IO操作,比如把用户上传的文件保存到硬盘的时候得用“\”这个方向的斜杠。
其实这里会有个问题,比如我要把网站的图片上传文件夹的路径做成可配置的。那我到底是在配置文件中写“\Uploads”还是“/Uploads”呢?毕竟这个常量需要同时给URL和程序去读。当然,你可以在程序里做进一步的处理。
三、路径的拼接
最简单的拼接就是两个字符串用“+”操作符拼起来。遇到已知的路径,这种做法是木有问题的。但有时候我们获取的变量并不好控制。虽然可能经过验证逻 辑处理,但验证并不总是灵活的。比如这个路径:“Uploads”,它和“Uploads\”意义是一样的。但如果直接用字符串相加把这个路径和另一个拼 起来,比如“2011”,显然就会有问题:前者少一个斜杠:Uploads2011,而我们需要的结果是Uploads\2011。
这时候我们需要借助System.IO.Path类中的Combine方法来做这件事。下面两条语句返回的结果都是一样的:
Path.Combine(@"Uploads", "2011");
Path.Combine(@"Uploads\", "2011");
复制代码
结果都是:Uploads\2011
注意,不要在第二个参数前加“\”,比如把第二个参数换成“\2011”,返回值就会变成“\2011”,丢失了“Uploads”。
四、Server与路径有关的属性和方法
1、ApplicationPath
获取当前应用程序的根目录路径,无论在该应用程序中的什么位置请求该路径。对于此示例,该属性将返回以下内容:
/
2、CurrentExecutionFilePath
获取当前请求的虚拟路径。不同于 FilePath,差别在于如果请求已在服务器代码中被重定向,则 CurrentExecutionFilePath 就是正确的。对于此示例,该属性将返回以下内容:
/MyApplication/文件
如果作为对 Transfer 或 Execute 进行调用的结果,您获取正在运行的代码中的属性,则路径将反映该代码的位置。
3、FilePath
获取当前请求的虚拟路径。对于此示例,该属性将返回以下内容:
/MyApplication/文件
不同于 CurrentExecutionFilePath,FilePath 不反映服务器端转换。
4、Path
获取当前请求的虚拟路径。对于此示例,该属性将返回以下内容:
/MyApplication/文件
5、PhysicalApplicationPath
获取当前正在执行的应用程序的根目录的物理文件系统路径。对于此示例,该属性将返回以下内容:
C:\inetpub\wwwroot\
6、PhysicalPath
获取与请求的 URL 对应的物理文件系统路径。对于此示例,该属性将返回以下内容:
C:\inetpub\wwwroot\MyApplication\MyPages\default.aspx
7、使用 MapPath 方法
MapPath 方法返回传递给该方法的虚拟路径的完整物理路径。例如,以下代码返回网站根目录的文件路径:
String rootPath = Server.MapPath("~");
注意
传递给 MapPath 方法的路径必须为应用程序相对路径,而不是绝对路径。
- ASP.NET泛型约束
- ASP.NET批量下载文件
- asp.net中Server.MapPath的使用
- 如何注册asp.net 4.0 到iis
- ASP.NET压缩图片
- asp.net把word文档转换成pdf
- Asp.Net中索引器的用法
- asp.net lambda表达式
- ASP.NET抓取网页内容
- asp.net 参数化like模糊查询
- ASP.NET方法重载
- ASP.NET URLRewriter伪静态
- ASP.NET中Partial Class部分类
- asp.net使用swfupload上传
- ASP.NET中Web.config文件的配置
- ASP.NET将WORD、PDF、PPT转为图片
- 8月再见 9月你好(8月再见)
- 魔兽世界 设计师爆料,原始版本并无PVP,跨阵营属于返璞归真(魔兽世界设计师爆料)
- 吐槽完《弧光大作战》之后,我们和设计师聊了聊魔兽首款手游的立项初衷和未来(吐槽完弧光大作战之后)
- 魔兽争霸3自定义战役少年杰雷 2(魔兽争霸3自定义战役少年杰雷)
- 今日菜价 芥兰涨幅最高 1.33 ,花菜降幅最高 3.10(今日菜价芥兰涨幅最高)
- 今日菜价 椰菜涨幅最高 3.25 ,水空心菜降幅最高 2.58(今日菜价椰菜涨幅最高)
热门推荐
- docker的配置与使用(docker之docker-machine用法详解)
- python udp网络编程(python实现一个简单的udp通信的示例代码)
- mysql如何删除外键约束数据(MySQL中外键的创建、约束以及删除)
- angular兄弟组件调用方法(Angular封装WangEditor富文本组件的方法)
- sql server 共享锁
- 简述css3动画与过渡效果(CSS3制作翻转效果_动力节点Java学院整理)
- oracle中decode函数
- DBnull和null的区别
- sleep线程不安全(当master down掉后,pt-heartbeat不断重试会导致内存缓慢增长的原因及解决办法)
- html5canvas动画(html5 canvas 实现光线沿不规则路径运动)