ASP.net 路徑問題

能详细解释一下: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。  

转载于:https://www.cnblogs.com/Luoke365/articles/1279790.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值