`
yyw84
  • 浏览: 78672 次
社区版块
存档分类
最新评论
阅读更多
很经常使用到的一个功能,但在在网上却一直没有找到相关的解决方法,今天借着项目应用到的机会写了两个将绝对路径转换为虚拟路径封装好的方法
将Web站点下的绝对路径转换为相对于指定页面的虚拟路径
<!---->/**//// <summary>
/// 将Web站点下的绝对路径转换为相对于指定页面的虚拟路径
/// </summary>
/// <param name="page">当前页面指针,一般为this</param>
/// <param name="specifiedPath">绝对路径</param>
/// <returns>虚拟路径, 型如: ../../</returns>
public static string ConvertSpecifiedPathToRelativePathForPage(Page page, string specifiedPath)
{
    
// 根目录虚拟路径
    string virtualPath = page.Request.ApplicationPath;
    
// 根目录绝对路径
    string pathRooted = HostingEnvironment.MapPath(virtualPath);
    
// 页面虚拟路径
    string pageVirtualPath = page.Request.Path;

    
if (!Path.IsPathRooted(specifiedPath) || specifiedPath.IndexOf(pathRooted) == -1)
    
{
        
throw new Exception(string.Format("\"{0}\"是虚拟路径而不是绝对路径!", specifiedPath));
    }


    
// 转换成相对路径 
    
//(测试发现,pathRooted 在 VS2005 自带的服务器跟在IIS下根目录或者虚拟目录运行似乎不一样,
    
// 有此地方后面会加"\", 有些则不会, 为保险起见判断一下)
    if (pathRooted.Substring(pathRooted.Length - 11== "\\")
    
{
        specifiedPath 
= specifiedPath.Replace(pathRooted, "/");
    }

    
else
    
{
        specifiedPath 
= specifiedPath.Replace(pathRooted, "");
    }


    
string relativePath = specifiedPath.Replace("\\""/");

    
string[] pageNodes = pageVirtualPath.Split('/');

    
// 减去最后一个页面和前面一个 "" 值
    int pageNodesCount = pageNodes.Length - 2;

    
for (int i = 0; i < pageNodesCount; i++)
    
{
        relativePath 
= "/.." + relativePath;
    }


    
if (pageNodesCount > 0)
    
{
        
// 如果存在 ".." , 则把最前面的 "/" 去掉
        relativePath = relativePath.Substring(1, relativePath.Length - 1);
    }


    
return relativePath;
}


第二个方法显然是从第一个方法中的前部分抽取出来的,所以懒得去添加相关注释 :P
将Web站点下的绝对路径转换为虚拟路径
<!---->/**//// <summary>
/// 将Web站点下的绝对路径转换为虚拟路径
/// 注:非Web站点下的则不转换
/// </summary>
/// <param name="specifiedPath">绝对路径</param>
/// <returns>虚拟路径, 型如: ~/</returns>
public static string ConvertSpecifiedPathToRelativePath(string specifiedPath)
{
    
string pathRooted = HostingEnvironment.MapPath("~/");

    
if (!Path.IsPathRooted(specifiedPath) || specifiedPath.IndexOf(pathRooted) == -1)
    
{
        
return specifiedPath;
    }


    
if (pathRooted.Substring(pathRooted.Length - 11== "\\")
    
{
        specifiedPath 
= specifiedPath.Replace(pathRooted, "~/");
    }

    
else
    
{
        specifiedPath 
= specifiedPath.Replace(pathRooted, "~");
    }


    
string relativePath = specifiedPath.Replace("\\""/");
    
return relativePath;
}


将虚拟路径转绝对路就没什么好说的了, HttpRequest.MapPath 方法专门干这事
分享到:
评论

相关推荐

    配置apache开启虚拟路径(伪静态)的方法.zip

    在IT行业中,Apache HTTP服务器是广泛应用的开源Web服务器,它提供了强大的功能,包括虚拟路径配置和伪静态处理。本文将详细介绍如何配置Apache以开启虚拟路径(也称为虚拟主机)和实现伪静态设置。 首先,虚拟路径...

    C#读取IIS网站物理路径

    在上述代码中,`HttpContext.Current`获取当前的HTTP上下文,`Server.MapPath`方法则将虚拟路径转换为物理路径。请注意,这个方法仅在ASP.NET环境中可用,因为需要依赖HTTP上下文。如果在非ASP.NET环境中,如控制台...

    在JSP中处理虚拟路径

    在一个web服务器上,虚拟路径将物理上分离的各文件组合在一起,放在同一个站点路径上,在应用服务器上,每个应用定位于其自己的虚拟路径上,实际上相互之间有着完美地分离。getRealPath()方法JSP servlet API提供...

    ASPnet 类库中获得当前路径的方法

    - **含义**:`HttpContext.Current.Server.MapPath`可以将相对路径转换成绝对路径。 - **示例**:假设我们需要获取当前Web应用下的某个文件夹(如`app_code`)的绝对路径,可以使用以下代码: ```csharp string ...

    实验6-windows-server-2008综合实验---web服务器配置.docx

    - **虚拟目录**:允许在同一Web站点下创建多个逻辑目录,实际指向不同的物理位置。 - **DNS(Domain Name System)**:负责将域名转换为IP地址的系统,实现网络中的名称解析。 - **端口号**:每个网络服务都绑定于...

    虚拟目录创建工具,让你轻松创建你的虚拟目录

    当用户通过浏览器访问一个虚拟目录时,Web服务器会将这个请求解析,并将其转换为实际存储在服务器硬盘上的物理路径。这样做可以避免因文件实际位置变动而影响网站的正常运行,同时也能实现多个网站共享同一资源的...

    2022年市场-互联网信息服务).pptx

    2. **创建虚拟目录**:虚拟目录允许将不同物理位置的文件映射为同一Web站点下的路径。这可以通过在IIS管理器中右键点击站点,选择“新建”-&gt;“虚拟目录”,设置别名和目录路径来完成。 3. **定义默认文档**:IIS可以...

    常见WEB服务器原理以及分析

    2. 使用DNS(域名系统)将主机名转换为IP地址。 3. 通过TCP/IP协议与服务器建立连接,向指定端口发送HTTP请求。 4. 服务器接收到请求后,处理请求并返回相应的HTML内容或其他资源。 服务器端可能提供了多种服务,如...

    Web程序的设计课后题答案.pdf

    7. **创建IIS虚拟目录**:在IIS管理器中,为目标文件夹创建虚拟目录,具体步骤包括打开管理器,展开站点,右击默认站点,添加虚拟目录,设定别名和物理路径,最后将虚拟目录转换为应用程序。 8. **ASP.NET开发中的...

    asp.net 毕业设计

    ASP.NET提供了多种方式来处理路径问题,如Server.MapPath()方法可以将虚拟路径转换为物理路径,而Url.Content()方法则可以用于生成相对于应用程序根目录的URL,这些都是在编写ASP.NET代码时应考虑的最佳实践。...

    jsp获取url路径的方法分析.docx

    它将虚拟路径转换为服务器上的实际文件路径,这对于访问静态资源或文件操作非常方便,但要注意,不是所有服务器环境都支持此功能。 除此之外,还有其他与URL相关的JSP操作: 1. 获取URL参数:通过 `request....

    虚拟IIS虚拟IIS

    虚拟IIS允许在一个物理服务器上创建多个独立的、互不干扰的Web站点,每个站点可以有不同的域名、IP地址或者端口号,从而实现资源的有效管理和隔离。 一、虚拟IIS的基本概念 1. 虚拟主机:在一台物理服务器上通过...

    第四章:构建虚拟Web主机.docx

    ### 构建虚拟Web主机知识点总结 #### 一、编译安装Apache服务器 **知识点概述:** 本章节主要介绍如何从源码编译并安装Apache HTTP Server,这是一套广泛使用的开源Web服务器软件。 **详细步骤:** 1. **解压缩...

    网页与Web程序设计 课件 ppt 机械工业出版社 part1

     为便于老师教学,我们将为选用本教材的任课老师免费提供电子教案。需要者请登录华章网站(http://www.hzbook.com)免费下载,或通过电子邮件与我们联系(wufox@126.com)。  作 者   2007年1月  于武汉...

    互联网信息服务).ppt

    此外,还可以创建虚拟目录,比如将“E:\All”设置为“test”虚拟目录,使得通过“192.168.0.1/test”即可访问这些文件。同时,指定默认文档名(如“Index.htm”),以便浏览器自动加载首页面。 如果需要创建多个Web...

    有关WebLogic编程的常见问题

    若要查找`file1.txt`(位于站点根路径下)和`file2.txt`(位于虚拟路径下)的真实路径,可以这样使用`getRealPath()`方法: - `getRealPath("/file1.txt")`应该返回类似`C:\site\site_root\file1.txt`的结果。 - `...

Global site tag (gtag.js) - Google Analytics