Server.MapPath
方法获取物理 路径,如 string physicalPath = Server.MapPath("~/");
。
在ASP.NET中,处理网站路径是一个常见且重要的任务,无论是客户端元素还是服务器控件,都需要正确地引用资源以确保页面能够正常加载和显示,下面将详细介绍ASP.NET中的路径处理方法,包括客户端元素路径、服务器控件路径以及如何确定当前网站的物理文件路径。
客户端元素是页面上的非Web服务器控件元素,它们将按原样传递给浏览器,从客户端元素中引用资源时,应根据HTML中URL的标准规则构造路径,可以使用完全限定的URL路径(绝对URL路径),也可以使用各种类型的相对路径。
1、绝对URL路径:如果引用其他位置(如外部网站)中的资源,则绝对URL路径非常有用。
<img src="http://www.contoso.com/MyApplication/Images/SampleImage.jpg" />
2、网站根目录相对路径:此路径根据网站根目录进行解析,假设Images文件夹位于网站根目录下,可以使用以下路径:
<img src="/Images/SampleImage.jpg" />
如果您的网站为http://www.contoso.com
,则此路径将解析为http://www.contoso.com/Images/SampleImage.jpg
。
3、当前页面相对路径:根据当前页面路径解析的相对路径。
<img src="Images/SampleImage.jpg" />
解析为当前页面路径对等的相对路径。
<img src="../Images/SampleImage.jpg" />
默认情况下,浏览器使用当前页面的URL作为基准解析相对路径,您可以在页面中包含HTML base元素,以指定替代基路径。
在引用资源的ASP.NET服务器控件中,可以使用绝对路径或相对路径,这一点与客户端元素一样,如果使用相对路径,则相对于页面、用户控件或包含该控件的主题的路径进行解析,假设Controls文件夹中包含一个用户控件,该用户控件包含一个Image Web服务器控件,此服务器控件的ImageUrl属性被设置为以下路径:
<asp:Image runat="server" ImageUrl="~/Images/SampleImage.jpg" />
当该用户控件运行时,上述路径将解析为以下形式:
/Controls/Images/SampleImage.jpg
无论承载该用户控件的页面位于何处,结果都是如此。
服务器控件中的绝对和相对路径引用具有以下缺点:
绝对路径不可移植:如果移动绝对路径指向的应用程序,则链接将会中断。
维护难度大:如果将资源或页面移动到不同的文件夹,可能很难维护采用客户端元素样式的相对路径。
为克服这些缺点,ASP.NET启用了Web应用程序根目录运算符(~),在服务器控件中指定路径时可以使用该运算符,ASP.NET会将~运算符解析为当前应用程序的根目录,可以结合使用~运算符和文件夹来指定基于当前根目录的路径。
<asp:Image runat="server" ImageUrl="~/Images/SampleImage.jpg" />
在该示例中,图像文件将从Web应用程序根目录下的Images文件夹中直接读取,无论该页面位于网站的什么位置。
注意,~运算符只能为服务器控件识别,并且位于服务器代码中,不能将~运算符用于客户端元素,可以在服务器控件中的任何与路径有关的属性中使用~运算符。
在主控页中,资源的路径基于内容页的路径进行解析,有关更多信息,请参见ASP.NET母版页。
在应用程序中,您可能需要确定服务器上的文件或其他资源的路径,如果应用程序以编程方式对文本文件进行读写操作,则必须为用于读取和写入的方法提供该文件的完整物理路径,将物理文件路径(如C:WebsiteMyApplication)硬编码到应用程序中并不是很好的做法,因为如果移动或部署应用程序,则路径会发生更改,ASP.NET提供了以编程方式获取应用程序中的任何物理文件路径的方法,您可以使用基文件路径创建所需资源的完整路径,用于确定文件路径的两种最常用的ASP.NET功能是返回路径信息的HttpRequest对象的属性,以及MapPath方法。
不应将物理文件路径发送到客户端,因为它们可能会被反面用户用来获取有关您的应用程序的信息。
根据请求属性确定路径:下表列出了HttpRequest对象的属性,这些属性帮助您确定应用程序中的资源的路径,表中列出的示例基于下面的假设:已使用以下URL发出浏览器请求:http://www.contoso.com/MyApplication/MyPages/Default.aspx。
属性 | 输出(output)实例 | 备注 |
Request.ApplicationPath | / | 指的是当前的application(应用程序)的目录 |
Request.PhysicalPath | D:ProjectsSolutionwebNewsPressContent.aspx | 磁盘驱动器代号:父目录子目录Content.aspx |
Request.PhysicalApplicationPath | D:ProjectsSolutionweb | 磁盘驱动器代号:父目录子目录 |
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 | |
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 | / | |
System.IO.Path.GetDirectoryName(Request.PhysicalPath) | D:ProjectsSolutionwebNewsPress | 磁盘驱动器代号:父目录子目录 |
System.IO.Path.GetFileName(Request.PhysicalPath) | Content.aspx |
1. 什么是ASP.NET中的绝对路径和相对路径?
在ASP.NET中,绝对路径是指从根目录开始的完整路径,而相对路径则是相对于当前目录或某个基准目录的路径,绝对路径通常用于确保无论应用程序如何部署或移动,资源的引用都能保持一致性,绝对路径在应用程序之间是不可移植的,如果移动绝对路径指向的应用程序,则链接将会中断,相对路径则更加灵活,但在某些情况下(如资源或页面移动到不同的文件夹)可能难以维护。
2. 如何在ASP.NET中引用外部资源?
在ASP.NET中,可以通过多种方式引用外部资源,对于客户端元素(如HTML中的标签),可以使用绝对URL路径或相对路径来引用资源,对于服务器控件,可以使用绝对路径或相对路径,但更推荐使用ASP.NET提供的~运算符来指定基于当前应用程序根目录的路径,这样可以确保无论页面位于网站的什么位置,都能正确解析资源路径,还可以使用Server.MapPath方法将虚拟路径转换为物理路径,以便在服务器端代码中进行文件操作。