从绝对的uri获得相对uri

时间:2009-07-10 13:33:08

标签: .net

我有一个System.Uri,例如,

var uri = new Uri("http://www.domain.com/foo/bar");

我如何才能获得相对的Uri:

/foo/bar

2 个答案:

答案 0 :(得分:26)

您要找的是Uri.AbsolutePathUri.PathAndQuery。 PathAndQuery将包含查询字符串(您在问题中没有),而AbsolutePath将只提供路径。

Console.WriteLine(uri.PathAndQuery);
// or 
Console.WriteLine(uri.AbsolutePath);

...输出以下结果......

  

/富/酒吧

答案 1 :(得分:0)

反之,即从相对路径获取绝对URI:-

1。获取所需的目录。 要向下移动,只需继续在目录中添加\对于 @“ c:\ someDirectory \ something \ something \ foo \ bar”

如果Directory.GetCurrentDirectory给出 @“ c:\ someDirectory” ,则执行以下操作:-

Uri uri = new Uri(Directory.GetCurrentDirectory() + 
          @"\something\something\" + relative_path);

Uri uri = new Uri(Directory.GetCurrentDirectory() + 
          "\\something\\something\\" + relative_path);

如果没有@符号,则必须用另一个\字符转义\字符,以便将其读取为字符串。

要向上走一步,请获取当前目录并使用 Directory.GetParent方法获取DirectoryInfo并继续使用 父级财产,以继续前进,例如对于 someDirectory \ foo \ bar

如果Directory.GetCurrentDirectory给出 @“ c:\ someDirectory \ somthing \ something” ,然后执行以下操作:-

 DirectoryInfo directory = 
     Directory.GetParent(Directory.GetCurrentDirectory()).Parent;

GetParent使您升级并返回DirectoryInfo对象 现在,您可以继续使用Parent属性来继续前进 仍然每次都获得DirectoryInfo。所以我上移了文件结构 两次。

 Uri uri = new Uri(directory.FullName + relative_path);

directory.FullName的类型为字符串,这是您的绝对路径 想要,将其连接到您的相对路径并生成一个新的Uri。 所以这是一种可以倒退的工作。