web的绝对路径问题

hainang1234 2006-09-17 09:58:28
很多情况下用绝对路径表达比相对路径方便很多。

比如login.aspx是根目录下的登陆页面,如果用相对路径,那么其下层目录的文件访问此页面就要写成:../login.aspx,而其下下层目录就要写:../../login.aspx,如果用绝对路径直接写成:/login.aspx就行了。

但由于我们做项目时一般都是建一个虚拟目录,而不是直接放在root下,所以用绝对路径表达/login.aspx就会出问题。

请问大家怎么解决这个矛盾?
...全文
711 28 打赏 收藏 转发到动态 举报
写回复
用AI写文章
28 条回复
切换为时间正序
请发表友善的回复…
发表回复
www_123du_com 2006-11-05
  • 打赏
  • 举报
回复
to hchxxzx(NET?摸到一点门槛):

好久没看见你了!
你说的这些知识正是我需要的!
谢谢!
hegang888888888 2006-11-04
  • 打赏
  • 举报
回复
ding
hchxxzx 2006-11-03
  • 打赏
  • 举报
回复
除了使用~号之外,PAGE还提供一个方法
Page.ResolveUrl,通过它,你可以把相对于当前路径的其他地址转换为相对绝对路径.

另外,我一般在系统中建立一个全局公用静态变量,是在站点建立的时候,探测系统的根路径
System.Web.HttpContext.Current.Request.ApplicationPath
这样,无论你使用的是虚拟目录还是站点,都会返回一个根目录,所有其他地方需要调用的路径,都可以使用它来引导.
一般来说,如果是站点,那么它返回"/",如果是虚拟目录,返回"/根目录名".
dwp008 2006-11-03
  • 打赏
  • 举报
回复
无所谓的阿
绝对路径是根据你的虚拟目录开始计算的,而不是根据root开始计算的阿
比如http://localhost/Portal/login.aspx
Portal就是你的虚拟目录阿
绝对路径是从Portal开始算起的阿
用 ~ 这个符号就可以了
www_123du_com 2006-11-03
  • 打赏
  • 举报
回复
我就是这意思:

hero4u(孤竹林) ( ) 信誉:100 Blog 2006-11-3 19:05:32 得分: 0

你建立了一个temp的虚拟目录可以用 /temp/来表示这个虚拟目录了相对于根
/temp/login.aspx
相对于根目录的。如果是http://localhost/temp/test/ 这个虚拟目录想用就用/temp/test/了

=============================
比如login.aspx是根目录下的登陆页面,如果用相对路径,那么其下层目录的文件访问此页面就要写成:../login.aspx,而其下下层目录就要写:../../login.aspx,如果用绝对路径直接写成:/login.aspx就行了。

但由于我们做项目时一般都是建一个虚拟目录,而不是直接放在root下,所以用绝对路径表达/login.aspx就会出问题。

请问大家怎么解决这个矛盾?
xiaoqiang08 2006-11-03
  • 打赏
  • 举报
回复
你用server.MapPath就可以解决啊!
daishengs 2006-11-03
  • 打赏
  • 举报
回复
相对路径路径好,虽然编码时麻烦点,但后期维护简单。
webdiyer 2006-11-03
  • 打赏
  • 举报
回复
建议不要用绝对路径,一时方便以后可能会带来无穷麻烦!我从来只用相对路径。
  • 打赏
  • 举报
回复
即使不那样写,那么就用~符号做前缀,写绝对路径,不要写相对路径(当你有transfter等命令的时候相对路径要人命)。
  • 打赏
  • 举报
回复
同意newwyf(Wonder Boy) ,你可以给每一个路径都加上标准的前缀字符串。
hero4u 2006-11-03
  • 打赏
  • 举报
回复
你建立了一个temp的虚拟目录可以用 /temp/来表示这个虚拟目录了相对于根
/temp/login.aspx
相对于根目录的。如果是http://localhost/temp/test/ 这个虚拟目录想用就用/temp/test/了

=============================
比如login.aspx是根目录下的登陆页面,如果用相对路径,那么其下层目录的文件访问此页面就要写成:../login.aspx,而其下下层目录就要写:../../login.aspx,如果用绝对路径直接写成:/login.aspx就行了。

但由于我们做项目时一般都是建一个虚拟目录,而不是直接放在root下,所以用绝对路径表达/login.aspx就会出问题。

请问大家怎么解决这个矛盾?
hainang1234 2006-11-03
  • 打赏
  • 举报
回复
~比较有用,但仅客户端的就不好办了。
cat_hsfz 2006-09-19
  • 打赏
  • 举报
回复
用"~"运算符,这是ASP.NET新增的运算符,只能够在服务器端解释,解释为当前Web应用程序的根目录,无论该根目录是否为根站点。
微技术 2006-09-19
  • 打赏
  • 举报
回复
把root指向一个文件夹,把你的工程项目放在里面。工程项目(文件夹名)设为虚拟目录,调用login.aspx时就成http://localhost/你的工程文件夹名/login.aspx
hainang1234 2006-09-19
  • 打赏
  • 举报
回复
还有人来没?大家具体是怎么做的?
myminimouse 2006-09-18
  • 打赏
  • 举报
回复
我上个星期也被路径问题搞的头很痛
www_123du_com 2006-09-18
  • 打赏
  • 举报
回复
kbs_1983(月色总朦胧,与清风把酒相送) ( ) 信誉:100 Blog 2006-9-17 22:15:47

还是习惯用root
你用Server 2003,新建站点再配置池就可以了,虚拟目录也不是不行,项目一大就麻烦!
______________________________

也就是说Server2003是可以建多个站点的是吗?用端口区分?可惜现在用的是xp。

虚拟目录的话,就不能使用绝对路径去表达了?(我想应该是的,因为html可不知道哪里是ASP.NET根目录)
newwyf 2006-09-17
  • 打赏
  • 举报
回复
我没有这样用过,你可以调试一下
好像server.MapPath("\\")与文件夹有关,比如文件在root\dir\page.aspx
你在page.aspx.cs里这样写应该获取的是"C:\你放网站的目录\root\dir"吧?
server.MapPath("~")好像是网站的绝对路径?
你调试一下,我忘记了。
网页你为什么要用绝对路径啊?
go_now 2006-09-17
  • 打赏
  • 举报
回复
可否使用
string path=server.MapPath("\\")+"没有放在root下的文件名";
newwyf 2006-09-17
  • 打赏
  • 举报
回复
public class PageBase : System.Web.UI.Page
{
private static string UrlSuffix {
get {
return HttpContext.Current.Request.Url.Host + HttpContext.Current.Request.ApplicationPath;
}
}

public static String UrlBase {
get {
return @"http://" + UrlSuffix;
}
}
}
加载更多回复(8)

62,046

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧