这难道是微软URI类的BUG!?

i_Ask 2007-10-31 06:40:24

public String FormAturl(String urlX, string objurl)
{

Uri baseUri = new Uri(objurl); //当前路径http://www.ijpsy.com/volumen6/num3/
Uri absoluteUri = new Uri(baseUri, urlX);//相对绝对路径urlx ="volumen6/num3/145.html"
return absoluteUri.ToString();//结果:http://www.ijpsy.com/volumen6/num3/volumen6/num3/145.html
}

当前路径:http://www.ijpsy.com/volumen6/num3/
相对路径:volumen6/num3/145.html
转换后路径:http://www.ijpsy.com/volumen6/num3/volumen6/num3/145.html
路径应该是:http://www.ijpsy.com/volumen6/num3/145.html

如果不是BUG那么如何解决这个问题?
...全文
185 20 打赏 收藏 转发到动态 举报
写回复
用AI写文章
20 条回复
切换为时间正序
请发表友善的回复…
发表回复
i_Ask 2007-11-02
  • 打赏
  • 举报
回复
问题的根源如wzd24 soaringbird 所说!
wzd24 2007-11-02
  • 打赏
  • 举报
回复
所以不要动不动就说微软的BUG,这很明显是你自己不认真所导致的。
soaringbird 2007-11-02
  • 打赏
  • 举报
回复
<base href="http://www.ijpsy.com/index.php" />这个起着作用呢
wzd24 2007-11-02
  • 打赏
  • 举报
回复
楼主不好好看清页面源代码。你看看这个标签,就知道为什么IE会这样解释了,如果去掉这个标签,你再试试看。
<base href="http://www.ijpsy.com/index.php" />
Ivony 2007-11-02
  • 打赏
  • 举报
回复
您的IE与众不同……
i_Ask 2007-11-02
  • 打赏
  • 举报
回复
to:lovefootball
相对路径是从HTML文件中提取出来的!所以加“/”是不可以的。
to:Ivony
针对你的第3点:没错,IE行为是正确的,但得到结果是“http://www.ijpsy.com/volumen6/num3/145.html”,相对URL是“volumen6/num3/145.html” 而不是“/volumen6/num3/145.html”;这证明你的“即不可能组合出...”是错误的!
lsmsky 2007-11-01
  • 打赏
  • 举报
回复
ddddddddddddddd

寻梦E
Ivony 2007-11-01
  • 打赏
  • 举报
回复
CSDN上的帖子大致可以分为几类,LZ这是典型的理解贴,即对同一问题LZ的理解与地球上大多数高智商动物不同。
i_Ask 2007-11-01
  • 打赏
  • 举报
回复
ding
Ivony 2007-11-01
  • 打赏
  • 举报
回复
可以肯定几点
1、Uri类的行为没有任何问题。
2、volumen6/num3/145.html相对路径除非是相对网站根,否则不能得到预期结果
3、IE的行为是对的,即不可能组合出http://www.ijpsy.com/volumen6/num3/145.html,除非是/volumen6/num3/145.html
i_Ask 2007-11-01
  • 打赏
  • 举报
回复
to ETstudio :
不差!请参见:http://www.ijpsy.com/volumen6/num3/ 页面中的“Abstract”链接
soaringbird 2007-11-01
  • 打赏
  • 举报
回复
http://www.ijpsy.com/volumen6/num3/
volumen6/num3/145.html
合起来当然是
http://www.ijpsy.com/volumen6/num3/volumen6/num3/145.html
Uri Constructor (Uri, String) 的作用就是把这两个地址合并,结果就应该是这样的,

http://www.ijpsy.com/volumen6/num3/
/volumen6/num3/145.html
的结果就应该是
http://www.ijpsy.com/volumen6/num3/145.html
lovefootball 2007-11-01
  • 打赏
  • 举报
回复
你可以在相对路径上前加"/"
lovefootball 2007-11-01
  • 打赏
  • 举报
回复
http://msdn2.microsoft.com/zh-cn/library/9hst1w91(VS.80).aspx

这上说的很清楚

baseUri
基 URI。
relativeUri
要添加到基 URI 的相对 URI。 //添加到......

如果 relativeUri 是绝对 URI(包含方案、主机名和可选的端口号),则仅使用 relativeUri 创建 Uri 实例。
i_Ask 2007-11-01
  • 打赏
  • 举报
回复
to Ivony :
我认为,这不是理解错误的问题!
基础URL:http://www.ijpsy.com/volumen6/num3/
相对URL:volumen6/num3/145.html
IE浏览器解析出的绝对URL:http://www.ijpsy.com/volumen6/num3/145.html

而应用以下函数应该能得到正确的绝对地址,但是返回结果是错误的地址,这个错误,我在国外程序员开发的有名的spider源代码中也出现的类似的错误!
FormAturl函数得到的地址是:http://www.ijpsy.com/volumen6/num3/volumen6/num3/145.html

public String FormAturl(String urlX, string objurl)
{

Uri baseUri = new Uri(objurl); //当前路径http://www.ijpsy.com/volumen6/num3/
Uri absoluteUri = new Uri(baseUri, urlX);//相对绝对路径urlx = "volumen6/num3/145.html "
return absoluteUri.ToString();//结果:http://www.ijpsy.com/volumen6/num3/volumen6/num3/145.html
}

ETstudio 2007-10-31
  • 打赏
  • 举报
回复
urlx = "/volumen6/num3/145.html "
差一个/
wKernel 2007-10-31
  • 打赏
  • 举报
回复
帮你顶起
i_Ask 2007-10-31
  • 打赏
  • 举报
回复
/
SDFDSAC 2007-10-31
  • 打赏
  • 举报
回复
MSDN
lalac 2007-10-31
  • 打赏
  • 举报
回复
LZ没有问题吧,你指定的BaseURI可是http://www.ijpsy.com/volumen6/num3/啊,这个BaseURI基础在加上volumen6/num3/145.html刚好就是输出的啊

LZ的意思是这样的吧:

public String FormAturl(String urlX, string objurl)
{
Uri baseUri = new Uri(objurl); //当前路径http://www.ijpsy.com/volumen6/num3/
baseUri = new Uri(baseUri.GetComponents(UriComponents.Host, UriFormat.SafeUnescaped));
Uri absoluteUri = new Uri(baseUri, urlX);//相对绝对路径urlx = "volumen6/num3/145.html "
return absoluteUri.ToString();//结果:http://www.ijpsy.com/volumen6/num3/volumen6/num3/145.html
}

110,571

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

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