温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

解除.NET中虚拟路径的疑惑

发布时间:2020-07-19 21:19:19 来源:网络 阅读:305 作者:hamu01 栏目:编程语言

今天部署产品时,发现一个涉及到路径错误的bug,在开发环境下都OK,但是到了测试环境中却一直报错,经过一番排查,原来错误出在了HttpContext.Current.Server.MapPath这个方法上,之前就一直对这个方法怎样将虚拟路径转化为物理路径不甚了了,今天我忍无可忍,在网上仔细查找了资料,还亲自做了实验,终于弄明白了。在此分享出来,希望能帮助到同样有困惑的人,少走弯路。

虚拟路径中的那些特殊字符的含义

  • Server.MapPath(".")返回当前执行文件所在路径
  • Server.MapPath("..")返回当前执行文件所在路径的父路径
  • Server.MapPath("~") 返回应用程序的所在路径
  • Server.MapPath("/"),Server.MapPath("\\"),Server.MapPath(@"\") 返回网站所在路径
  • Server.MapPath("")Server.MapPath(null) 返回文件所在路径,和Server.MapPath(".")是一样的

众所周知我们在URL中的路径都是虚拟路径,最后都要被转化为网站所在服务器的物理路径,一般的路径都很好理解,对大家造成困扰的多是包含这些特殊字符的路径,他们在虚拟路径到物理路径的转化过程中有着特殊的含义。

 

举例说明

先在IIS中创建一个网站,网站域名为www.test.com,修改hosts文件将这个域名指向本机,网站目录为C:\inetpub\wwwroot\Test。在这个网站下添加应用程序Shop,目录为D:\Shop。在这个网站和应用程序中同时添加一个目录,取名main。

解除.NET中虚拟路径的疑惑

创建一个WebForm,这个WebForm输出上述所有特殊字符在运行时对应的路径,代码如下:

<% Output(".", "点号"); Output("..", "双点号"); Output("~","波浪号"); Output("/","正斜杠"); Output("\\", "反斜杠"); Output(@"\","反斜杠"); Output(null,"null"); Output(string.Empty, "string.Empty");

Output(@"\main", @"\main"); %> <script runat="server"> private void Output(string token, string tokenDisplayName) { try { string path = tokenDisplayName + " : " + HttpContext.Current.Server.MapPath(token); Response.Write(path + "<br/>"); } catch (Exception) { Response.Write(tokenDisplayName + " : 非法路径" + "<br/>"); } } </script>

 

我们把这个页面分别放到网站和应用程序的根目录以及main目录下,然后访问每个页面,输出如下:

解除.NET中虚拟路径的疑惑 解除.NET中虚拟路径的疑惑 解除.NET中虚拟路径的疑惑 解除.NET中虚拟路径的疑惑

结论

从上面的页面输出可以很好的验证文章开始处的说明,这里需要特别说明的几点是:

  • 在网站根目录下,访问Server.MapPath("..")会抛出异常,这说明网站中的所有访问不能超出网站所在的目录范围,这样的设计合情合理
  • 在URI中访问的路径都是虚拟路径,而不是物理路径,Shop这个应用程序的上一级目录不是其物理环境中的上一级目录,而是在IIS中其上级所在的目录,也就是网站所在的目录,因此在Shop这个应用程序中访问Server.MapPath("..")返回的C:\inetpub\wwwroot\Test
  • 不管是正斜杠还是反斜杠映射的都是网站根目录,之所以强调这一点是因为在网上查看资料的时候,见到如下的说法:在Shop应用程序的根目录下访问Server.MapPath(@"\main")返回的是D:\Shop\main目录,这个说法是绝对不正确的,特此提醒
向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI