ASP.NET 网站路径

from : http://msdn2.microsoft.com/zh-cn/library/ms178116(VS.80).aspx

使用网站中的资源时,通常必须指定资源的路径。例如,您可以使用 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" />

    注意

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

服务器控件

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

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

注意

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

母版页和内容页路径

当请求某个内容页时,其内容与母版页合并,并且该页在内容页的上下文中运行。例如,如果获取 HttpRequest 对象的 CurrentExecutionFilePath 属性,则无论是在内容页代码还是母版页代码中,路径都表示内容页的位置。

母版页和内容页不必位于同一文件夹中。只要内容页的 @ Page 指令中的 MasterPageFile 属性解析为一个 .master 页,ASP.NET 就可以将内容页和母版页合并为一个单独的已呈现的页。

引用外部资源

内容页和母版页都可以包含引用外部资源的控件和元素。例如,两者都可以包含引用图像文件的图像控件,或包含引用其他页的定位点。

合并的内容和母版页的上下文是内容页的上下文。这会影响在定位点上指定资源(如图像文件和目标页)的 URL 的方式。

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

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

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

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

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

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

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

注意

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

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

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

将物理文件路径(例如 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 方法的路径必须为应用程序相对路径,而不是绝对路径。

转载于:https://www.cnblogs.com/emanlee/archive/2008/04/26/1172591.html

ASP.NET 网站路径相关推荐

  1. ASP.NET 网站路径[转载]

    文章来源:http://blog.csdn.net/winnerzone/archive/2007/05/10/1603044.aspx 转载于:https://www.cnblogs.com/win ...

  2. asp.net获取网站路径

    网站在服务器磁盘上的物理路径: HttpRuntime.AppDomainAppPath 虚拟程序路径: HttpRuntime.AppDomainAppVirtualPath 任何于Request/ ...

  3. asp.net 引入html文件路径问题,asp.net 网站获取一个文件或文件夹的绝对路径,使用方法Server.MapPath(项目根目下虚拟文件路径)实现...

    asp.net 网站获取一个文件或文件夹的绝对路径,使用方法Server.MapPath("项目根目下虚拟文件路径")实现,代码如下:using System; using Sys ...

  4. 预编译 ASP.NET 网站以进行部署

    预编译 ASP.NET 网站以进行部署和更新 打开一个命令窗口并定位到包含 .NET Framework 的文件夹. .NET Framework 将安装在以下位置. %windir%\Microso ...

  5. Asp.net网站的自动部署-sqlserver数据库的自动部署

    Asp.net网站的自动部署 2005-09-28 这段时间要解决的问题是asp.net网站的自动部署,主要功能是在安装的时候实现数据库的部署和基本数据的添加,asp.net网站的部署(多个虚拟目录) ...

  6. VS 2012 如何发布 ASP.NET 网站到本地IIS

    VS2012 与 VS 2010 不同的地方是在发布网站的时候VS2012的界面会让人有种摸不着头脑的感觉. 下面是如何将ASP.NET 网站发布到本地IIS上的步骤. 第一步,右键解决方案管理器中的 ...

  7. 网站优化记录-通过命令预编译Asp.net 网站,成功优化到毫秒级别。

    在去年一次项目上线时发现部署的站点首次访问跟回收后响应特别慢,每次都在3秒以内.(使用的是vs工具预编译的方式发布),在随后找到解决办法是通过命令预编译Asp.net 网站,成功解决站点响应在毫秒级别 ...

  8. Windows Server 2008 IIS7.0 发布html和Asp.net网站

    第一步:安装并配置IIS 7.0 先要设置应用程序池(ApplicationPool)为Classic.NETAppPool,而不是默认的DefaultAppPool.可以设置.net FrameWo ...

  9. 使用InstallShield下部署ASP.NET网站和MySQL,目标机为Win7——(二)使用InstallShield部署非安装版MySQL...

    接上一篇文章http://www.cnblogs.com/wigis/archive/2012/12/01/2797505.html 在使用bat批处理可以自动部署MySQL服务端后,我们使用Inst ...

最新文章

  1. Knative 实战:基于 Knative Serverless 技术实现天气服务-下篇
  2. C++11新特性decltype
  3. redisTemplate进行自增操作例子
  4. tp5怎么生成短链接_请问在tp5中怎样才能使用url函数?
  5. java 某年某月中第几周 开始时间和结束时间_重磅!库里又要签下一超级大合同!4年2亿啊!退役时间也定了...
  6. Dotnet程序集自动生成版本号
  7. [数据恢复答疑]删除了WINDOWS桌面上的文件,该如何恢复数据
  8. 微信投票python脚本_微信刷票Python脚本教程
  9. 人脸识别一体机解决方案
  10. 牛气!青云QingCloud 进入“混合云市场竞争力领导者象限”
  11. 输入快递单号自动识别快递公司的方法
  12. 【python+selenium】自动登陆青果教务系统
  13. android 手机投屏电视,手机投屏到智能电视上的几种方法
  14. poj 1001 Exponentiation(java)
  15. 存储器PCB布线技巧
  16. set和setenv的区别
  17. 【PCIe 6.0】PCIe Flit 打包解包规则
  18. 复数complex的magnitude是什么
  19. 在控制面板,管理工具找不到Internet 信息服务
  20. Telnet协议详解及使用C# 用Socket 编程来实现Telnet协议

热门文章

  1. ROS rqt、rviz
  2. linux 4t磁盘格式化,centos格式化大于2T的硬盘
  3. 1流明等于多少lux_光通量(流明)和照度(勒克司)定义及换算关系
  4. mysql-修改密码(error-1290 (HY000): The MySQL server is running with the --skip-grant-tables option so)
  5. 基于java SSM校园兼职平台系统设计和实现
  6. 触发器及其应用实验报告总结_双面喷绘材料的分类及其应用,超全总结!(建议收藏)...
  7. python中convert函数用法_Python Pandas DataFrame.tz_convert用法及代码示例
  8. java中start与loop_java for-loop问题
  9. 关于在node.js 中使用formData 发送axios上传文件失败解决方案
  10. 使用Lambda表达式遍历Iterator迭代器