ASP.net 路径问题 详解

偶尔还会因路径的问题郁闷了半天 还以为是程序上出了问题了。以下我是转自--我们 里的一篇技文,略作修改,以备不时只需,各位有需要的也可参考参考,有错的也请各位指出。

比如你的工程是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" />注意
默认情况下,浏览器使用当前页面的 URL 作为解析相对路径的基准。但是,您可以在页面中包含 HTML base 元素,以指定替代基路径。

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

注意

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

服务器控件中的绝对和相对路径引用具有以下缺点:
绝对路径在应用程序之间是不可移植的。如果移动绝对路径指向的应用程序,则链接将会中断。
如果将资源或页面移动到不同的文件夹,可能很难维护采用客户端元素样式的相对路径。
为克服这些缺点,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 方法的路径必须为应用程序相对路径,而不是绝对路径。
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。

(0)

相关推荐

  • ASP.net 路径问题 详解

    偶尔还会因路径的问题郁闷了半天 还以为是程序上出了问题了.以下我是转自--我们 里的一篇技文,略作修改,以备不时只需,各位有需要的也可参考参考,有错的也请各位指出. 比如你的工程是Webapplication1(url是:http://localhost/webapplication1/webform1.aspx) Request.ApplicationPath 就是/Webapplication1 如果是站点就直接返回"/"; ----------------------------

  • ASP 中 DateDiff 函数详解 主要实现两日期加减操作

    ASP 中 DateDiff 函数详解DateDiff 函数 描述  返回两个日期之间的时间间隔.  语法  DateDiff(interval, date1, date2 [,firstdayofweek][, firstweekofyear]])  DateDiff 函数的语法有以下参数: 参数 描述  interval 必选.字符串表达式,表示用于计算 date1 和 date2 之间的时间间隔.有关数值,请参阅"设置"部分.  date1, date2 必选.日期表达式.用于计

  • web.xml中如何设置配置文件的加载路径实例详解

    web.xml中如何设置配置文件的加载路径实例详解 web应用程序通过Tomcat等容器启动时,会首先加载web.xml文件,通常我们工程中的各种配置文件,如日志.数据库.spring的文件等都在此时被加载,下面是两种常用的配置文件加载路径,即配置文件可以放到 SRC目录下或者可以放到WEB-INF根目录下 第一种在web.xml中这样配置: <context-param> <param-name >contextConfigLocation </param-name >

  • Mysql5.7.18版本(二进制包安装)自定义安装路径教程详解

    安装路径:/application/mysql-5.7.18 1.前期准备 mysql依赖 libaio yum install -y libaio 创建用户mysql,以该用户的身份执行mysql useradd -s /bin/false -M mysql 下载mysql二进制包并解压 cd /tools wget https://dev.mysql.com/get/Downloads/MySQL-5.7/mysql-5.7.18-linux-glibc2.5-x86_64.tar.gz t

  • Python模块搜索路径代码详解

    简述 由于某些原因,在使用 import 时,Python 找不到相应的模块.这时,解释器就会发牢骚 - ImportError. 那么,Python 如何知道在哪里搜索模块的路径呢? 模块搜索路径 当导入名为 hello 的模块时,解释器首先搜索具有该名称的内置模块.如果没有找到,将在变量 sys.path 给出的目录列表中搜索名为 hello.py 的文件. sys.path 从这些位置初始化: 包含输入脚本的目录(或当前目录,当没有指定文件时) PYTHONPATH(目录名列表,与 she

  • Webpack中publicPath路径问题详解

    最近自己在搭建一个基于webpack的react项目,遇到关于output.publicPath和webpack-dev-server中publicPath的问题,而官方文档对它们的描述也不是很清楚,所以自己研究了下并写下本文记录. output output选项指定webpack输出的位置,其中比较重要的也是经常用到的有 path 和 publicPath output.path 默认值: process.cwd() output.path 只是指示输出的目录,对应一个 绝对路径 ,例如在项目

  • 更改Python的pip install 默认安装依赖路径方法详解

    前言 声明:python版本3.6,以下讨论的Python也都是适用于3.x版本 在实际使用安装python的pip安装 依赖库是非常的便捷的. 而且一般大家使用的都是安装Anaconda 来学习和实践python项目. 我们通常都是直接就是使用 pip install **** 其中****代表就是安装的依赖库名或者包名. 但是简单的背后就是,我们的最重要的系统盘C盘都是逐渐满了.更关键是你满完之后还不好去删除或者将一些依赖库放在别的盘的路径下,这就是一件非常糟糕的事情了. 所以今天,为了拯救

  • Go Java算法之二叉树的所有路径示例详解

    目录 二叉树的所有路径 方法一:深度优先遍历搜索(Java) 方法二:广度优先遍历(Go) 二叉树的所有路径 给你一个二叉树的根节点 root ,按 任意顺序 ,返回所有从根节点到叶子节点的路径. 叶子节点 是指没有子节点的节点. 示例 1: 输入:root = [1,2,3,null,5] 输出:["1->2->5","1->3"] 示例 2: 输入:root = [1] 输出:["1"] 提示: 树中节点的数目在范围 [1,

  • Go Java算法之简化路径实例详解

    目录 简化路径 方法一:栈(Java) 方法二:标准库(Go) 简化路径 给你一个字符串 path ,表示指向某一文件或目录的 Unix 风格 绝对路径 (以 '/' 开头),请你将其转化为更加简洁的规范路径. 在 Unix 风格的文件系统中,一个点(.)表示当前目录本身:此外,两个点 (..) 表示将目录切换到上一级(指向父目录):两者都可以是复杂相对路径的组成部分. 任意多个连续的斜杠(即,'//')都被视为单个斜杠 '/' . 对于此问题,任何其他格式的点(例如,'...')均被视为文件/

  • pycharm指定python路径过程详解

    pycharm指定python路径,pycharm配置python环境的方法是: 1.依次点击[File].[Project Interpreter]: 2.点击[Show All],选择[Existing Environment]: 3.选择python的安装路径,点击OK即可. pycharm如何设置python路径 解释器的选项路径为:File->Setting->Build, Execution, Deployment-> Console-> Python Console:

随机推荐