asp.net路径问题

各位有没有碰到在日常工作中经常在路径设置的时候把 "~/ 、./ 、../ 、 / 、http://www.cnblogs.com/"这些符号搞混搞乱了?偶尔还会因路径的问题郁闷了半天 还以为是程序上出了问题.

比如你的工程是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。

绝对路径和相对路径:

1.Request.ApplicationPath->当前应用的目录 
Jsp中, ApplicationPath指的是当前的application(应用程序)的目录,ASP.NET中也是这个意思。 
对应的--例如我的服务器上有两个web应用域名都是mockte.com 一个映射到目录mockte.com/1/ 另一个影射到 http://mockte.com/2/ 
那么mockte.com/1/就是第一个应用的ApplicationPath 同理 mockte.com/2/就是第二个应用的ApplicationPath

2.Request.FilePath->对应于iis的虚拟目录 
如 URL http://mockte.com/1/index.html/pathinfo 
FilePath = /1/index.html

3.Request.Path->当前请求的虚拟路径 
Path 是 FilePath 和 PathInfo 尾部的串联。例如 URL http://mockte.com/1/index.html/pathinfo 
那么Path = /1/index.html/pathinfo

4.Request.MapPath(string url)->将url映射为iis上的虚拟目录 
这个目录都是相对于application的根目录的 
于Server.MapPath相比,不会包含类似c:/这样的路径 
可以理解为是相对路径(对比的Server.MapPath就是绝对路径)

5.Server.MapPath(string url)->将url映射为服务器上的物理路径 
例如 http://mockte.com/1/index.html 假设你的应用程序在c:/iis/MySite中 
那么就是 c:/iis/MySite/1/index.html

//本地路径转换成URL相对路径
     private string urlconvertor(string imagesurl1)
    {
        string tmpRootDir = Server.MapPath(System.Web.HttpContext.Current.Request.ApplicationPath.ToString());//获取程序根目录
        string imagesurl2 = imagesurl1.Replace(tmpRootDir, ""); //转换成相对路径
         imagesurl2 = imagesurl2.Replace(@"\", @"/");
        //imagesurl2 = imagesurl2.Replace(@"Aspx_Uc/", @"");
        return imagesurl2;
     }
    //相对路径转换成服务器本地物理路径
    private string urlconvertorlocal(string imagesurl1)
    {
        string tmpRootDir = Server.MapPath(System.Web.HttpContext.Current.Request.ApplicationPath.ToString());//获取程序根目录
        string imagesurl2 = tmpRootDir + imagesurl1.Replace(@"/", @"\"); //转换成绝对路径
         return imagesurl2;
     }

1.使用filePath="/Logs/abc.txt",被认为是根目录,即网页文件所在的盘符,默认的是C盘,则在这里这个路径被解释为"C:\Logs\abc.txt"

2.使用filePath="~/Logs/abc.txt",被认为是服务器的目录

时间: 2024-10-01 11:08:37

asp.net路径问题的相关文章

ASP.NET路径解惑

对于ASP.NET的路径问题,一直都是云里雾里,没有去详细的理解,今天正好可以梳理一下它们之间的关系和使用方法.而若想明白路径的表示方式的使用方法和区别以及注意事项可以通过下面的几个概念来进一步加深: 绝对路径和相对路径 绝对路径 每个网页都有一个唯一的地址,它就是该网页的绝对路径.绝对路径提供所链接文档的完整URL,而且包括所使用的协议(例如对于网页,通常使用HTTP).例如上面的第一种写法就是一个绝对路径(虽然是一个不存在的地址). 必须使用绝对路径才能链接到其他服务器上的文档.尽管对本地链

win7和win2008 r2下配置IIS7(ASP.net运行环境)

win7和win2008 r2下配置IIS7(ASP.net运行环境) 1.先要设置应用程序池(ApplicationPool)为Classic.NETAppPool,而不是默认的DefaultAppPool,可以在网站目录里对每个站点设置,也可以在站点进行单独设置. 控制面板--系统和安全--管理工具--Internet信息服务(IIS)管理器,打开IIS管理器.选中左侧的默认网站,单击右侧的高级设置,将应用程序池设置为Classic.NETAppPool. 2.选中左侧的“应用程序池”,选中

Win7如何安装IIS来浏览ASP网站

1 进入控制面板-->程序与功能-->点击左侧的"打开或关闭Windows功能"-->把"Internet信息服务"给勾上,点击"确定"后开始安装.(注意只要框子显示为蓝色即可,无法显示勾子) 2 还是在"打开或关闭Windows功能"里面,再次安装IIS功能,在万维网服务-应用程序开发上勾选ASP. 3 安装完成后点击如下选项IIS管理器 4选择 Default Web Site,并双击 ASP 的选项,I

当你的IIS需要运行ASP网站时,需要这样配置下你的IIS

1.进入Windows 7的 控制面板->程序和功能->选择左上角的 打开或关闭Windows功能 2.现在出现了安装Windows功能的选项菜单,注意选择的项目,红色箭头所示的地方都要选择上才能正确配置成功. 3.如果在启动iis失败出现下图的错误就是因为你没有按照如上的方式进行选择所需要的组件. 4.安装完成后,再次进入 控制面板->管理工具:双击 Internet信息服务(IIS)管理器 选项,进入IIS设置. 5.双击后就进入到如下图的IIS控制面板 6.选择 Default W

通过ASP生成html纯静态页面的简单示例

本站收录这篇文章通过ASP生成html纯静态页面的简单示例,详细解说文章中相关静态 asp 技术与知识,欢迎能给大家一些在这方面的支持和帮助!下面是详细内容: 原理:通过浏览器传送变量,如 http://127.0.0.1/shengcheng.asp?id=90 代码:if SaveFile("/new/"&id&".html","http://127.0.0.1/news.asp?id="&id&"&

[转载]微信支付

公众号支付有2种支付方式: JS API 支付:是指用户打开图文消息或者扫描二维码,在微信内置浏览器打开网页进行的支付.商户网页前端通过使用微信提供的 JS API,调用微信支付模块.这种方式,适合需要在商户网页进行选购下单的购买流程.Native(原生)支付:是指商户组成符合 Native(原生)支付规则的 URL 链接,用户可通过点击该链接或者扫描对应的二维码直接进入微信支付模块(微信客户端界面),即可进行支付.这种方式,适合无需选购直接支付的购买流程. 以上两种方式最大的区别是:是否需要经

微信支付--入门篇

公众号支付有2种支付方式: JS API 支付:是指用户打开图文消息或者扫描二维码,在微信内置浏览器打开网页进行的支付.商户网页前端通过使用微信提供的 JS API,调用微信支付模块.这种方式,适合需要在商户网页进行选购下单的购买流程.  Native(原生)支付:是指商户组成符合 Native(原生)支付规则的 URL 链接,用户可通过点击该链接或者扫描对应的二维码直接进入微信支付模块(微信客户端界面),即可进行支付.这种方式,适合无需选购直接支付的购买流程. 以上两种方式最大的区别是:是否需

《转》Win7 IIS7.5 安装

一.进入Win7的 控制面板,选择左侧的 打开或关闭Windows功能. 二.现在出现了安装Windows功能的选项菜单,注意选择的项目,我们需要手动选择需要的功能,下面这张图片把需要安装的服务都已经选择了,大家可以按照图片勾选功能.(我全部选定了) 三.安装完成后,选择 开始,选择 管理工具,打开 Internet信息服务(IIS)管理器选项,进入IIS设置. 四.现在进入到IIS7控制面板. 五.选择 Default Web Site,并双击 ASP 的选项. 六.WIN7下IIS中ASP

文件上传的思考 (转) http://blog.csdn.net/ncafei/article/details/53401961

文件上传校验 客户端JavaScript校验(一般只校验后缀名) 一般都是在网页上写一段javascript脚本,校验上传文件的后缀名,有白名单形式也有黑名单形式. 判断方式:在浏览加载文件,但还未点击上传按钮时便弹出对话框,内容如:只允许上传.jpg/.jpeg/.png后缀名的文件,而此时并没有发送数据包. 服务端校验: 1.文件头content-type字段校验(image/gif):代码对上传文件的文件类型进行了判断,如果不是图片类型,返回错误. 2.文件内容头校验(GIF89a): 可