asp.net 中的相对路径
闭包客 2016-12-16 06:02:57 前几天看到一个怎么在 asp.net 中写网页路径的问题,在这里多说几句。
在 web form 的编程中,一个完整的 url 是一般是这样的:
http://bbs.csdn.net/dir/file.aspx
程序员在编写指向 file.aspx 这个页面的代码的时候,往往不知道项目会部署到什么域名中,又或者测试的时候所使用域名与正式环境所使用域名不相同。在 IIS 中,还有在一个网站中创建应用的做法,更有多个域名指向同一个网站的情况……
可能在网页部署的时候,是这样的:
http://www.csdn.net/dir/file.aspx
http://geek.csdn.net/dir/file.aspx
http://www.csdn.net/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
这种写法只能写在支持它的服务器端控件中,根据代码的目录位置,经过程序处理,它生成到客户端的链接可能是:
file.aspx
../file.aspx
../../file.aspx
也就是说,它会被生成浏览器能够识别的链接,这种写法是不能直接被浏览器识别的,必须通过 asp.net 程序的处理。
这种方法使得程序员在深层次目录指向浅目录时,可以少写几个点(.)
据说更重要的是,它能兼容 IIS 中在网站下面创建应用的情况,也就是即使项目部署到 http://www.csdn.net/app1 ,这种写法不用修改,而相对于域名的链接 /dir/file.aspx ,则会指向错误,但相对于代码目录位置的写法 ../file.aspx 是不受影响的。
我不知道这种写法在 asp.net mvc 中会发生什么情况,它自带的路由功能,使得代码的目录位置与实际访问的位置已经没有关联。其实在 mvc 以前,你使用了 url 重写同样如此。
我比较喜欢 /dir/file.aspx 这种相对于域名的写法。
因为访问路径其实比较容易确定,一旦网站部署,改动并不会太频繁,因为它可能被用户收藏,也可能被搜索引擎抓取了。
相对于访问路径,改动得更频繁的,可能是代码的目录位置。现在的 web 编程,javascript 代码、异步请求越来越多,一个 url 可以被选择写在多个目录位置中。可能是被前端工程师写在 html 文件、js 文件中,也可能被后端程序员写在 aspx、cshtml、cs 文件中。