ASP.NET将Web站点下的绝对路径转换为虚拟路径
2009-11-26 11:10
501 查看
ASP.NET将Web站点下的绝对路径转换为虚拟路径
2009-11-25 10:39
2009-11-25 10:39
很经常使用到的一个功能,但在在网上却一直没有找到相关的解决方法,今天借着项目应用到的机会写了两个将绝对路径转换为虚拟路径封装好的方法 将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 - 1, 1) == "//") { 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="page">当前页面指针,一般为this</param> /// <param name="specifiedPath">绝对路径</param> /// <returns>虚拟路径, 型如: ~/</returns> public static string ConvertSpecifiedPathToRelativePath(Page page, string specifiedPath) { string virtualPath = page.Request.ApplicationPath; string pathRooted = HostingEnvironment.MapPath(virtualPath); if (!Path.IsPathRooted(specifiedPath) || specifiedPath.IndexOf(pathRooted) == -1) { return specifiedPath; } if (pathRooted.Substring(pathRooted.Length - 1, 1) == "//") { specifiedPath = specifiedPath.Replace(pathRooted, "~/"); } else { specifiedPath = specifiedPath.Replace(pathRooted, "~"); } string relativePath = specifiedPath.Replace("//", "/"); return relativePath; } 将虚拟路径转绝对路就没什么好说的了, HttpRequest.MapPath 方法专门干这事 |
相关文章推荐
- ASP.NET根路径的获取和将Web站点下的绝对路径转换为虚拟路径的两种方案
- 将web站点下的绝对路径转换为虚拟路径_asp.net技巧
- ASP.NET将Web站点下的绝对路径转换为虚拟路径
- ASP.NET将Web站点下的绝对路径转换为虚拟路径
- ASP.NET根路径的获取和将Web站点下的绝对路径转换为虚拟路径的两种方案
- 将Web站点下的绝对路径转换为虚拟路径
- 将Web站点下的绝对路径转换为虚拟路径
- 将Web站点下的绝对路径转换为虚拟路径
- 将Web站点下的绝对路径转换为虚拟路径
- JavaScript打开窗口函数(Window.Open)使用详解、绝对路径与相对路径的获取与转换(含ASP.NET)
- asp.net web页面显示服务器绝对路径下图片
- [置顶] asp.net(c#)中相对路径(虚拟路径)和物理磁盘路径的转换
- IIS上虚拟站点的web.config与主站点的web.config冲突解决方法 分类: ASP.NET 2015-06-15 14:07 60人阅读 评论(0) 收藏
- ASP.net 1.1 中相对路径转换为绝对路径
- asp.net服务器绝对路径转换成URL相对路径
- asp.net(c#)中相对路径(虚拟路径)和物理磁盘路径的转换
- IIS上虚拟站点的web.config与主站点的web.config冲突解决方法 分类: ASP.NET 2015-06-15 14:07 59人阅读 评论(0) 收藏
- asp.net(C#)服务器绝对路径转换成URL相对路径[修改] (转)
- asp.net(C#)服务器绝对路径转换成URL相对路径[修改]
- ASP.NET(5):虚拟路径转换到物理路径的一种实现方法,不用MapPath