服务器控件在引用资源的 ASP.NET 服务器控件中,可以使用绝对路径或相对路径,这一点与客户端元素一样。如果使用相对路径,则相对于页面、用户控件或包含该控件的主题的路径进行解析。例如,假设 Controls 文件夹中包含一个用户控件。该用户控件包含一个 Image Web 服务器控件,该服务器控件的 ImageUrl 属性设置为以下路径:
Images/SampleImage.jpg
该用户控件运行时,路径将解析为以下形式:
/Controls/Images/SampleImage.jpg
无论承载用户控件的页面位置如何,都是如此。
服务器控件中的绝对和相对路径引用具有以下缺点:
-
绝对路径在应用程序之间是不可移植的。如果移动绝对路径指向的应用程序,则链接将会中断。
-
如果将资源或页面移动到不同的文件夹,可能很难维护采用客户端元素样式的相对路径。
为克服这些缺点,ASP.NET 启用了 Web 应用程序根目录运算符 (~),在服务器控件中指定路径时,可以使用该运算符。ASP.NET 会将 ~ 运算符解析为当前应用程序的根目录。可以结合使用 ~ 运算符和文件夹来指定基于当前根目录的路径。下面的示例演示使用 Image 服务器控件时用于指定图像的根目录相对路径的 ~ 运算符:
<asp:image runat="server" id="Image1"ImageUrl="~/Images/SampleImage.jpg" />
在该示例中,图像文件将从 Web 应用程序根目录下的 Images 文件夹中直接读取,无论该页面位于网站的什么位置。
注意 |
---|
~ 运算符只能为服务器控件识别,并且位于服务器代码中。不能将 ~ 运算符用于客户端元素。 |
可以在服务器控件中的任何与路径有关的属性中使用 ~ 运算符。
注意 |
---|
在主控页中,资源的路径基于内容页的路径进行解析。有关更多信息,请参见 ASP.NET 母版页概述。 |
确定当前网站的物理文件路径
在应用程序中,您可能需要确定服务器上的文件或其他资源的路径。例如,如果应用程序以编程方式对文本文件进行读写操作,则必须为用于读取和写入的方法提供该文件的完整物理路径。
将物理文件路径(如 C:/Website/MyApplication)硬编码到应用程序中并不是很好的做法,因为如果移动或部署应用程序,则路径会发生更改。但是,ASP.NET 为您提供了以编程方式获取应用程序中的任何物理文件路径的方法。然后,您可以使用基文件路径创建所需资源的完整路径。用于确定文件路径的两种最常用的 ASP.NET 功能是返回路径信息的 HttpRequest 对象的属性,以及 MapPath 方法。
注意 |
---|
不应将物理文件路径发送到客户端,因为它们可能会被恶意用户用来获取有关您的应用程序的信息。 |
根据请求属性确定路径
下表列出了 HttpRequest 对象的属性,这些属性帮助您确定应用程序中的资源的路径。
下面的示例假定使用以下 URL 来发出浏览器请求:
http://www.contoso.com/MyApplication/MyPages/Default.aspx
对于这些示例,术语“虚拟路径”是指跟在服务器标识符后面的请求 URL 的一部分,此时虚拟路径如下所示:
/MyApplication/MyPages/Default.aspx
此外,这些示例假定网站根目录的物理路径为以下形式:
C:/inetpub/wwwroot/MyApplication/
最后,这些示例假定物理路径包含一个名为 MyPages 的文件夹。
属性 | 说明 |
---|---|
ApplicationPath | 获取当前应用程序的根目录路径,无论在该应用程序中的什么位置请求该路径。对于此示例,该属性将返回以下内容: / |
CurrentExecutionFilePath | 获取当前请求的虚拟路径。不同于 FilePath,差别在于如果请求已在服务器代码中被重定向,则 CurrentExecutionFilePath 就是正确的。对于此示例,该属性将返回以下内容: /MyApplication/MyPages/Default.aspx 如果作为对 Transfer 或 Execute 进行调用的结果,您获取正在运行的代码中的属性,则路径将反映该代码的位置。 |
FilePath | 获取当前请求的虚拟路径。对于此示例,该属性将返回以下内容: /MyApplication/MyPages/Default.aspx 不同于 CurrentExecutionFilePath,FilePath 不反映服务器端转换。 |
Path | 获取当前请求的虚拟路径。对于此示例,该属性将返回以下内容: /MyApplication/MyPages/default.aspx |
PhysicalApplicationPath | 获取当前正在执行的应用程序的根目录的物理文件系统路径。对于此示例,该属性将返回以下内容: C:/inetpub/wwwroot/ |
PhysicalPath | 获取与请求的 URL 对应的物理文件系统路径。对于此示例,该属性将返回以下内容: C:/inetpub/wwwroot/MyApplication/MyPages/default.aspx |
使用 MapPath 方法
MapPath 方法返回传递给该方法的虚拟路径的完整物理路径。例如,以下代码返回网站根目录的文件路径:
Visual Basic
复制代码
Dim rootPath As String = Server.MapPath("~")
C#
String rootPath = Server.MapPath("~");
注意 |
---|
传递给 MapPath 方法的路径必须为应用程序相对路径,而不是绝对路径。 |
补充:一个小点"."表示当前目录,两个小点".."表示上级目录。