一、关于相对路径和绝对路径
相对路径转绝对路径
一般,我们在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中的绝对路径和相对路径的更多相关文章

  1. 关于ASP.Net中路径的问题

    比如你的工程是Webapplication1(url是:http://localhost/webapplication1/webform1.aspx) Request.ApplicationPath ...

  2. ASP.NET中相对路径的使用总结

    如果有一个网站上的图片的路径是这样的: http://localhost:2008/websit1/images/1.jpg websit1表示的是虚拟路径或者是站点 在asp.net中,如果我们在. ...

  3. asp.net中FileUpload得到上传文件的完整路径

    asp.net中FileUpload得到上传文件的完整路径 Response.Write("完整路径:" + Server.MapPath(FileUpload1.PostedFi ...

  4. ASP.NET中的物理路径与虚拟路径

    物理路径:c:\PathsAndURLs\Content\Colors.html虚拟路径:(http://localhost:53274/Content/Colors.html)路径中端口号后面的那部 ...

  5. [置顶] asp.net(c#)中相对路径(虚拟路径)和物理磁盘路径的转换

    物理路径就是磁盘路径,也就是说是在磁盘上的位置,虚拟路径也就是web页面上的路径,是相对于应用程序而言的 /// <summary> /// 将物理路径转换成相对路径 /// </s ...

  6. asp.net(c#)中相对路径(虚拟路径)和物理磁盘路径的转换

    物理路径:磁盘路径,也就是在磁盘上的位置. 虚拟路径:web页面上的路径,是相对于应用程序而言的. /// 将物理路径转换成相对路径           /// </summary>   ...

  7. ASP.NET中常用的优化性能的方法

    1. 数据库访问性能优化 数据库的连接和关闭 访问数据库资源需要创建连接.打开连接和关闭连接几个操作.这些过程需要多次与数据库交换信息以通过身份验证,比较耗费服务器资源.ASP.NET中提供了连接池( ...

  8. Asp.Net中使用OpenRowSet操作Excel表,导入Sql Server(实例)

    有两种接口可供选择:Microsoft.Jet.OLEDB.4.0(以下简称 Jet 引擎)和Microsoft.ACE.OLEDB.12.0(以下简称 ACE 引擎). Jet 引擎大家都很熟悉,可 ...

  9. C#、ASP.NET获取当前应用程序的绝对路径,获取程序工作路径 (转帖)

    C#.ASP.NET获取当前应用程序的绝对路径,获取程序工作路径   ============================================ 使用 Application.Start ...

随机推荐

  1. iOS 实时监听app的网络连接状态

    实际iOS开发中,在网络通信中我们大部分使用第三方(只谈短链),譬如 AFNetworking.ASIHttpRequest(这个停更了,想必现在没多少人用),swift的 Alamofire 等. ...

  2. UVa 1394: And Then There Was One

    设置一个数组Winner记录经典约瑟夫问题中的剩余者即可递归解决该问题. 注: 约瑟夫问题:有编号为0~n-1的n个人,从0号开始报数1,2,3......报到k的杀死,然后从下一个人开始继续报数1, ...

  3. 理解java中【同步】和【死锁】

    一.理解同步 要想解决资源共享的同步操作问题,可以使用两种方法: 使用同步代码块 之前学习过程中,代码块分为四种: l         普通代码块:是直接定义在方法之中的: l         构造块 ...

  4. Maven 工程下 Spring MVC 站点配置 (一)

    最近,查找一些具体资料时,虽然会有很多,但是系统的却很少,尤其是对maven 下 spring mvc 站点搭建的配置,总是说的很多但让新手一目了然的步骤却少之又少. 对此闲暇时整理了一下,做了一套较 ...

  5. php错误日志级别

    ; E_ALL             所有错误和警告(除E_STRICT外) ; E_ERROR           致命的错误.脚本的执行被暂停. ; E_RECOVERABLE_ERROR   ...

  6. Android平台抓取native crash log

    Android开发中,在Java层可以方便的捕获crashlog,但对于 Native 层的 crashlog 通常无法直接获取,只能通过系统的logcat来分析crash日志. 做过 Linux 和 ...

  7. DDD的"waiting until GDB gets ready"

    运行DDD调试器时,出现卡死现象,看软件状态,发现"waiting until GDB gets ready",Google了这个问题,很多都是删除文件夹"~/.ddd& ...

  8. 会场安排问题--nyoj题目14

    会场安排问题 时间限制:3000 ms  |  内存限制:65535 KB 难度:4   描述 学校的小礼堂每天都会有许多活动,有时间这些活动的计划时间会发生冲突,需要选择出一些活动进行举办.小刘的工 ...

  9. Demo+在Linux下运行(CentOS7+dotnetcore sdk)

    来份ASP.NET Core尝尝 0x01.前言 学习ASP.NET Core也有一段时间了,虽说很多内容知识点还是处于一知半解的状态,但是基本的,还是 略懂一二.如果有错误,还望见谅. 本文还是和之 ...

  10. SQL Server 分区表的创建方法与管理

    背景知识: 分区表.可以把表中的数据按范围保存到不同的文件组中. 举个例子吧: 2014年以前的数据保存到文件组A 2014~2015的数据保存到文件组B 2015年以后的数据保存到文件组C 好处: ...