| 订阅 | 在线投稿
分享
 
 
当前位置: 王朝网络 >> asp >> ASP.NET将Web站点下的绝对路径转换为虚拟路径
 

ASP.NET将Web站点下的绝对路径转换为虚拟路径

2006-11-24 06:26:17 编辑來源:互联网 繁體版 评论
 
 
  很经常使用到的一个功能,但在在网上却一直没有找到相关的解决方法,今天借着项目应用到的机会写了两个将绝对路径转换为虚拟路径封装好的方法
  将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通过Remoting service上传文件》
下一篇《ASP.NET利用webclient获取页面源代码的解决方》
 
 
 
 
 49.*.*.* 发表于2013-06-09 22:28:50
  看不懂= = 有点复杂
  大大註解可以再详细点吗??
  例如為啥要这样做??
  还有 基底路径、实体路径、虚拟路径、绝对路径、相对路径差异??
  回复
  
  
 
 
 
日版宠物情人插曲《Winding Road》歌词

日版宠物情人2017的插曲,很带节奏感,日语的,女生唱的。 最后听见是在第8集的时候女主手割伤了,然后男主用嘴帮她吸了一下,插曲就出来了。 歌手:Def...

兄弟共妻,我成了他们夜里的美食

老钟家的两个儿子很特别,就是跟其他的人不太一样,魔一般的执着。兄弟俩都到了要结婚的年龄了,不管自家老爹怎么磨破嘴皮子,兄弟俩说不娶就不娶,老父母为兄弟两操碎了心...

如何磨出破洞牛仔裤?牛仔裤怎么剪破洞?

把牛仔裤磨出有线的破洞 1、具体工具就是磨脚石,下面垫一个硬物,然后用磨脚石一直磨一直磨,到把那块磨薄了,用手撕开就好了。出来的洞啊很自然的。需要猫须的话调几...

我就是扫描下图得到了敬业福和爱国福

先来看下敬业福和爱国福 今年春节,支付宝再次推出了“五福红包”活动,表示要“把欠大家的敬业福都还给大家”。 今天该活动正式启动,和去年一样,需要收集“五福”...

冰箱异味产生的原因和臭味去除的方法

有时候我们打开冰箱就会闻到一股异味,冰箱里的这种异味是因为一些物质发出的气味的混合体,闻起来让人恶心。 产生这些异味的主要原因有以下几点。 1、很多人有这种习...

《极品家丁》1-31集大结局分集剧情介绍

简介 《极品家丁》讲述了现代白领林晚荣无意回到古代金陵,并追随萧二小姐化名“林三”进入萧府,不料却阴差阳错上演了一出低级家丁拼搏上位的“林三升职记”。...

李溪芮《极品家丁》片尾曲《你就是我最爱的宝宝》歌词

你就是我最爱的宝宝 - 李溪芮 (电视剧《极品家丁》片尾曲) 作词:常馨内 作曲:常馨内 你的眉 又鬼马的挑 你的嘴 又坏坏的笑 上一秒吵闹 下...

乌梅的功效与作用以及乌梅的食用禁忌有哪些?

乌梅,又称春梅,中医认为,乌梅味酸,性温,无毒,具有安心、除热、下气、祛痰、止渴调中、杀虫的功效,治肢体痛、肺痨病。乌梅泡水喝能治伤寒烦热、止吐泻,与干姜一起制...

什么是脂肪粒?如何消除脸部脂肪粒?

什么是脂肪粒 在我们的脸上总会长一个个像脂肪的小颗粒,弄也弄不掉,而且颜色还是白白的。它既不是粉刺也不是其他的任何痘痘,它就是脂肪粒。 脂肪粒虽然也是由油脂...

网络安全治理:国家安全保障的主要方向是打击犯罪,而不是处置和惩罚受害者

来源:中国青年报 新的攻击方法不断涌现,黑客几乎永远占据网络攻击的上风,我们不可能通过技术手段杜绝网络攻击。国家安全保障的主要方向是打击犯罪,而不是处置和惩罚...

河南夫妻在温岭网络直播“造人”内容涉黄被刑事拘留

夫妻网络直播“造人”爆红   1月9日,温岭城北派出所接到南京警方的协查通告,他们近期打掉了一个涉黄直播APP平台。而根据掌握的线索,其中有一对涉案的夫妻主播...

如何防止墙纸老化?墙纸变旧变黄怎么办?

如何防止墙纸老化? (1)选择透气性好的墙纸 市场上墙纸的材质分无纺布的、木纤维的、PVC的、玻璃纤维基材的、布面的等,相对而言,PVC材质的墙纸最不透气...

鲜肌之谜非日本生产VS鲜肌之谜假日货是谣言

观点一:破日本销售量的“鲜肌之谜” 非日本生产 近一段时间,淘宝上架了一款名为“鲜肌之谜的” 鲑鱼卵巢美容液,号称是最近日本的一款推出的全新护肤品,产品本身所...

中国最美古诗词精选摘抄

系腰裙(北宋词人 张先) 惜霜蟾照夜云天,朦胧影、画勾阑。人情纵似长情月,算一年年。又能得、几番圆。 欲寄西江题叶字,流不到、五亭前。东池始有荷新绿,尚小如...

关于女人的经典语句

关于女人的经典语句1、【做一个独立的女人】 思想独立:有主见、有自己的人生观、价值观。有上进心,永远不放弃自己的理想,做一份自己喜爱的事业,拥有快乐和成就...

未来我们可以和性爱机器人结婚吗?

你想体验机器人性爱吗?你想和性爱机器人结婚吗?如果你想,机器人有拒绝你的权利吗? 近日,第二届“国际人类-机器人性爱研讨会”大会在伦敦金史密斯大学落下帷幕。而...

全球最变态的十个地方

10.土耳其地下洞穴城市 变态指数:★★☆☆☆ 这是土耳其卡帕多西亚的一个著名景点,传说是当年基督教徒们为了躲避战争而在此修建。里面曾住着20000人,...

科学家称,人类死亡后意识将在另外一个宇宙中继续存活

据英国《每日快报》报道,一位科学家兼理论家Robert Lanza博士宣称,世界上并不存在人类死亡,死亡的只是身体。他认为我们的意识借助我们体内的能量生存,而且...

《屏里狐》片头曲《我爱狐狸精》歌词是什么?

《我爱狐狸精》 - 刘馨棋   (电视剧《屏里狐》主题曲)   作词:金十三&李旦   作曲:刘嘉   狐狸精 狐狸仙   千年修...

 
 
 
很经常使用到的一个功能,但在在网上却一直没有找到相关的解决方法,今天借着项目应用到的机会写了两个将绝对路径转换为虚拟路径封装好的方法 将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 方法专门干这事
󰈣󰈤
 
 
 
  免责声明:本文仅代表作者个人观点,与王朝网络无关。王朝网络登载此文出于传递更多信息之目的,并不意味着赞同其观点或证实其描述,其原创性以及文中陈述文字和内容未经本站证实,对本文以及其中全部或者部分内容、文字的真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
 
 
秀气迷人的居家女生(17)
秀气迷人的居家女生(16)
秀气迷人的居家女生(15)
秀气迷人的居家女生(14)
藏经阁
昆明石林印象
冰雪美丽
五月梧桐
 
>>返回首页<<
 为你推荐
 
 
 
 
 
 转载本文
 UBB代码 HTML代码
复制到剪贴板...
 
 
 
 
 
 
 
 
 
 
 
©2005- 王朝网络 版权所有