asp.net 中的相对路径

在 web form 编程中,一个完整的 url 是一般是这样的:

http://yourdomain.com/dir/file.aspx

程序员在编写指向 file.aspx 这个页面的代码的时候,往往不知道项目会部署到什么域名中,又或者测试的时候所使用域名与正式环境所使用域名不相同。在 IIS 中,还有在一个网站中创建应用程序的做法,更有多个域名指向同一个网站的情况……

可能在网页部署的时候,是这样的:

http://app1.yourdomain.com/dir/file.aspx
http://yourdomain.com/app1/dir/file.aspx

这样,如果使用完整的 url(绝对路径),部署的域名不同或端口不同或应用不同,你都要修改你的代码中的 url。

为了避免这样的情况,那么就要使用相对路径,前端工程师编写的 html 文件,会这样写:

/dir/file.aspx(这是相对于域名,也就是根目录的路径,与代码本身的目录位置无关)

如果指向 file.aspx 的代码在同一个目录下,也可以:

file.aspx

如果在上一层目录中:

dir/file.aspx

如果在下一层目录中:

../file.aspx

如果在下一层目录的下一层目录中:

../../file.aspx

(以上四种是相对于代码目录位置的路径,代码目录位置变动之后,就不再准确)

asp.net 还支持一种相对路径写法:

~/dir/file.aspx

这种写法在 asp.net 中叫做“虚拟路径”,属性名是“VirtualPath”。只能写在支持它的服务器端控件中,根据代码的目录位置,经过程序处理,它生成到客户端的路径可能是:

file.aspx
../file.aspx
../../file.aspx

也就是说,它会被生成浏览器能够识别的路径,这种写法是不能直接被浏览器识别的,必须通过 asp.net 程序的处理。

这种写法的作用和相对于域名的路径相同:

~/dir/file.aspx 等同于 /dir/file.aspx

之所以需要这种写法,是需要兼容 IIS 中在网站下面添加应用程序和虚拟目录的情况,也就是即使项目部署到 http://yourdomain.com/app1,这种写法不用修改,因为它被 asp.net 程序处理成相对于代码目录位置的路径。而相对于域名的路径 /dir/file.aspx,则会指向错误。相对于代码目录位置的写法 ../file.aspx 是不受影响的

我不知道这种写法在 asp.net mvc 中会发生什么情况,它自带的路由功能,使得代码的目录位置与实际访问的路径已经没有关联。其实在 mvc 以前,你使用了 url 重写同样如此。

我比较喜欢 /dir/file.aspx 这种相对于域名的写法。

因为访问路径其实比较容易确定,一旦网站部署,改动并不会太频繁,因为它可能被用户收藏,也可能被搜索引擎抓取了。

相对于访问路径,改动得更频繁的,可能是代码的目录位置。现在的 web 编程,javascript 代码、异步请求越来越多,一个 url 可以被选择写在多个目录位置中。可能是被前端工程师写在 html 文件、js 文件中,也可能被后端程序员写在 aspx、cshtml、cs 文件中。

根据帖子:http://bbs.csdn.net/topics/392065120 整理。

广州必简信息科技有限公司 版权所有 粤ICP备15047625号-2