ASP.net 路徑問題

 

  ~只能用于服务器控件里或服务器代码里

 

绝对路径-以Web站点根目录为参考基础的目录路径。之所以称为绝对,意指当所有网页引用同一个文件时,所使用的路径都是一样的。

  其实绝对路径与相对路径的不同处,只在于描述目录路径时,所采用的参考点不同。由于对网站上所有文件而言,根目录这个参考点对所有文件都是一样的,因此,运用以根目录为参考点的路径描述方式才会被称之为绝对路径。

  以下为建立路径所使用的几个特殊符号,及其所代表的意义。

  "."--代表目前所在的目录。
  ".."--代表上一层目录。
  "/"--代表根目录。



  接下来,我们假设读者所建立的Web站点拥有如下图所示目录路径。

 



  假若要在Ref.htm文件中引用BeRef.gif文件时,其相对路径如下:

  ./SubDir2/BeRef.gif

  上面的引用路径中,"."代表目前的目录(Dir1),所以"./SubDir2"代表目前目录下的SubDir2。其实,也可以省略"./"直接用下这个方式引用。

  SubDir2/BeRef.gif

  若使用绝对路径以根目录为参考点引用该文件时,引用路径如下:

  /Dir1/SubDir2/BeRef.gif

  如果Web站点的目录之结构如下图时

         

 

          引用BeRef.gif文件的相对路径又是如何呢?

  假若要在Ref.htm文件中引用BeRef.gif文件时其相对路径如下:
 
  ../SubDir2/BeRef.gif

  上面的引用路径中,".."代表上一层目录,所以,/Dir2"代表上一层目录下的Dir2子目录。若使用绝对路径引用时,则引用路径如下:

  /Dir2/BeRer.gif

  我们再举一个比较复杂的例子,来比较一下相对路径与绝对路径的使用。假设在读者所建立之Web站点中,拥有如下图的目录路径。

  


  我们用以一个表格来说明在上图的情况下,某文件引用另一文件时,所应使用的相对路径与绝对路径。

引用者
被引用者
相对路径
绝对路径
Ref1.htm BeRef1.gif ../SubDir2/BeRef1.gif Dir1/SubDir2/BeRef1.gif
Ref2.htm BeRef1.gif http://www.cnblogs.com/Dir1/SubDir2/ BeRef1.gif /Dir1/SubDir2/ BeRef1.gif
Ref1.htm BeRef2.htm http://www.cnblogs.com/Dir2/ BeRef2.htm /Dir2/BeRef2.htm
Ref2.htm BeRef2.htm ../BeRef2.htm /Dir2/BeRef2.htm

  上表中比较需要说明的是"http://www.cnblogs.com/"所代表的意义。

  ".."代表上一层目录,而"http://www.cnblogs.com/"所代表的是上一层目录的上一层目录。所以,从上表中可以看出,如果引用的文件存在于目前目录的子目录中,或者存在于上一层目录的 另一个子目录中,运用相对路径是比较方便的。如果不是时,则干脆利用绝对路径,还比较省事。从上表中,亦可以看出,当被引用的是同一个文件时,引用文件所使用的绝对路径是一样的。




能详细解释一下:Request.ApplicationPath,~/,/,./,../及其用法(可时用)吗?老是在相对路径问题上出错。 问题点数:

 

相对路径和绝对路径

 


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

  如果是站点就直接返回"/";  
   
  ------------------------------------------------------  
  ~/   可以用在需要设置路径的控件比如:imagebutton,image等   以及链接ascx文件,配置文件.  
  ../   的好处是可以不知道文件夹的名字知道层次结构就可以了  
  /       的好处是针对根路径,如果本地目录和服务器目录一致,那直接用/就可以保证路径正确,这种情况很少.  
  Request.ApplicationPath   注意如果没有虚拟目录就直接返回/,那你程序里面就不要设置/  
  比如  
  Request.ApplicationPath+"/images/a.gif"   如果是站点   就是等于   "//images/a.gif",错误的  
  如果有虚拟目录就是   "Webapplication1/images/a.gif"  
  没有/的


Request.ApplicationPath     发挥虚拟目录名称,如果是站点就返回/  
  ~/   类似,不过只用服务端的空间可以识别;  
  /   针对目录  
  ./   不知道  
  ../   相对当前目录的上层目录  
  比如你的工程是Webapplication1(url是:http://localhost/webapplication1/webform1.aspx)  
  Request.ApplicationPath     就是Webapplication1/  
  ~/   也是   Webapplication1/  
  /就是http://localhost/  
  如果webform1.aspx   下有个文件webform2.aspx  
  你可以在webform1.aspx里这样使用  
  <a   href=webform2.aspx>ddd</a>  
  或者  
  <a   href=/webapplication1/webform2.aspx></a>  
  或者  
  <a   href=../webform2.aspx></a>

 

ASP.NET 网站路径

使用网站中的资源时,通常必须指定资源的路径。例如,您可以使用 URL 路径引用页面中的图像文件或网站中其他位置处的页面的 URL。同样,Web 应用程序中的代码可以使用基于服务器的文件的物理文件路径对文件进行读写操作。ASP.NET 提供用于引用资源并确定应用程序中的页面或其他资源的路径的方法。

指定资源的路径

许多情况下,页面中的元素或控件必须引用外部资源,如文件。ASP.NET 支持引用外部资源的各种方法。根据您使用的是客户端元素还是 Web 服务器控件,选择的引用方法将有所不同。

客户端元素

客户端元素是页面上的非 Web 服务器控件元素,它们将按原样被传递给浏览器。因此,从客户端元素中引用资源时,应根据 HTML 中 URL 的标准规则构造路径。可以使用完全限定的 URL 路径(又称为绝对 URL 路径),也可以使用各种类型的相对路径。例如,如果页面包含 img 元素,则可以使用以下路径之一设置其 src 属性:

  • 绝对 URL 路径。如果引用其他位置(例如外部网站)中的资源,则绝对 URL 路径非常有用。

    <img src="http://www.contoso.com/MyApplication/Images/SampleImage.jpg" />
  • 网站根目录相对路径,此路径将根据网站根目录(而非应用程序根目录)进行解析。如果将跨应用程序的资源(例如图像或客户端脚本文件)保留在网站根目录下的文件夹中,则网站根目录相对路径非常有用。

    此示例路径假定 Images 文件夹位于网站根目录下。

    <img src="/Images/SampleImage.jpg" />

    如果您的网站为 http://www.contoso.com,则此路径将解析为以下形式。

    http://www.contoso.com/Images/SampleImage.jpg
  • 下面是一个根据当前页面路径解析的相对路径。

    <img src="Images/SampleImage.jpg" />
  • 解析为当前页面路径对等的相对路径。

    <img src="../Images/SampleImage.jpg" />
    Note注意

    默认情况下,浏览器使用当前页面的 URL 作为解析相对路径的基准。但是,您可以在页面中包含 HTML base 元素,以指定替代基路径。

服务器控件

在引用资源的 ASP.NET 服务器控件中,可以使用绝对路径或相对路径,这一点与客户端元素一样。如果使用相对路径,则相对于页面、用户控件或包含该控件的主题的路径进行解析。例如,假设 Controls 文件夹中包含一个用户控件。该用户控件包含一个 Image Web 服务器控件,此服务器控件的 ImageUrl 属性被设置为以下路径:Images/SampleImage.jpg

当该用户控件运行时,上述路径将解析为以下形式:/Controls/Images/SampleImage.jpg。无论承载该用户控件的页面位于何处,结果都是如此。

Note注意

在主控页中,资源的路径基于内容页的路径进行解析。有关更多信息,请参见 ASP.NET 母版页概述

服务器控件中的绝对和相对路径引用具有以下缺点:

  • 绝对路径在应用程序之间是不可移植的。如果移动绝对路径指向的应用程序,则链接将会中断。

  • 如果将资源或页面移动到不同的文件夹,可能很难维护采用客户端元素样式的相对路径。

为克服这些缺点,ASP.NET 包括了 Web 应用程序根目录运算符 (~),当您在服务器控件中指定路径时可以使用该运算符。ASP.NET 会将 ~ 运算符解析为当前应用程序的根目录。可以结合使用 ~ 运算符和文件夹来指定基于当前根目录的路径。

下面的示例演示了使用 Image 服务器控件时用于为图像指定根目录相对路径的 ~ 运算符。在此示例中,无论页面位于网站中的什么位置,都将从位于 Web 应用程序根目录下的 Images 文件夹中直接读取图像文件。

<asp:image runat="server" id="Image1"
ImageUrl="~/Images/SampleImage.jpg" />

可以在服务器控件中的任何与路径有关的属性中使用 ~ 运算符。~ 运算符只能为服务器控件识别,并且位于服务器代码中。不能将 ~ 运算符用于客户端元素。

Note注意

仅限于移动页,如果您的应用程序依赖于无 Cookie 会话或者可能收到来自移动设备的需要无 Cookie 会话的请求,则在路径中使用波形符(“~”)会导致意外创建新会话,并可能丢失会话数据。若要使用包含波形符(例如“~/路径”)的路径来设置移动控件的属性,请先使用 ResolveUrl 方法解析该路径,再将其分配给该属性。

确定当前网站的物理文件路径

在应用程序中,您可能需要确定服务器上的文件或其他资源的路径。例如,如果应用程序以编程方式对文本文件进行读写操作,则必须为用于读取和写入的方法提供该文件的完整物理路径。

将物理文件路径(例如 C:\Website\MyApplication)硬编码到应用程序中并不是很好的做法,因为如果移动或部署应用程序,将会更改这些路径。但是,ASP.NET 为您提供了以编程方式获取应用程序中的任何物理文件路径的方法。然后,您可以使用基文件路径创建所需资源的完整路径。用于确定文件路径的两种最常用的 ASP.NET 功能是返回路径信息的 HttpRequest 对象的属性,以及 MapPath 方法。

Note注意

不应将物理文件路径发送到客户端,因为它们可能会被恶意用户用来获取有关您的应用程序的信息。

根据请求属性确定路径

下表列出了 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

如果作为对 TransferExecute 进行调用的结果,您获取正在运行的代码中的属性,则路径将反映该代码的位置。

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("~")
String rootPath = Server.MapPath("~");
Note注意

传递给 MapPath 方法的路径必须为应用程序相对路径,而不是绝对路径。

 Control.ResolveUrl   方法     [C#]请参见  
  Control   类   |   Control   成员   |   System.Web.UI   命名空间   |   TemplateSourceDirectory   |   Control   成员(Visual   J#   语法)   |   C++   托管扩展编程    
  要求  
  平台:   Windows   2000,   Windows   XP   Professional,   Windows   Server   2003   系列  
  语言  
  C#  
   
  C++  
   
  JScript  
   
  Visual   Basic  
   
  全部显示  
  将   URL   转换为在请求客户端可用的   URL。  
   
  [Visual   Basic]  
  Public   Function   ResolveUrl(   _  
        ByVal   relativeUrl   As   String   _  
  )   As   String  
   
  [C#]  
  public   string   ResolveUrl(  
        string   relativeUrl  
  );  
   
  [C++]  
  public:   String*   ResolveUrl(  
        String*   relativeUrl  
  );  
   
  [JScript]  
  public   function   ResolveUrl(  
        relativeUrl   :   String  
  )   :   String;  
   
  参数  
  relativeUrl    
  与   TemplateSourceDirectory   属性相关联的   URL。    
  返回值  
  转换后的   URL。  

posted @ 2009-05-05 15:30  不帅你砍我  阅读(310)  评论(0)    收藏  举报