zoukankan      html  css  js  c++  java
  • asp.net 中的相对路径

    转载于https://bbs.csdn.net/topics/392065120

    前几天看到一个怎么在 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 文件中。

    在 asp.net 中正规的路径写法是类似
        ~/dir/file.aspx
       ~/js/common.js
    这类写法,既不是绝对路径也不是相对路径。

    那么对于纯粹的“前端”代码,不是说就傻傻地束手无策了(以为只能写成绝对路径或者相对路径),而是要在 javascript 代码中写
        ServerPath + "/dir /file.aspx"
    这样的路径才对。

    事实上~/dir/file.aspx不止在服务器端软件生效,在其他非服务器端软件(如 <img>、<a>)web应该程序也会转换成正确的路径

     ~/dir/file.aspx与 /dir/file.aspx的区别:

     /dir/file.aspx表示从网站根目录开始寻找, ~/dir/file.aspx表示从当前应用程序根目录开始寻找

    比如在MVCTest网站下面添加了一个应用程序yt,那么~/Content/Image/cat.jpg生成的路径是/yt/Content/Image/cat.jpg

    而/Content/Image/cat.jpg 生成的路径是/Content/Image/cat.jpg是在 mvctest下面寻找而不是在yt下面寻找

    <img src="~/Content/Image/cat.jpg" alt="" />

    <img src="/Content/Image/cat.jpg" alt="" />

  • 相关阅读:
    python命令行工具模块-click
    python项目代码打包成Docker镜像
    背包九讲
    秒杀项目的3个奇数问题:并发队列的选择,请求接口的合理设计,高并发下的数据安全
    java类加载过程
    索引失效
    java面试
    进程间通信
    HashMap在Jdk1.7和1.8中的实现
    十大排序算法
  • 原文地址:https://www.cnblogs.com/lidaying5/p/13267600.html
Copyright © 2011-2022 走看看