从绝对URI中获取相对URI

24

我有一个System.Uri,例如:

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

如何仅获取相对URI:

/foo/bar
2个回答

38
你要找的是 Uri.AbsolutePath 或者 Uri.PathAndQuery。 PathAndQuery 会包含查询字符串(在你的问题中没有),而 AbsolutePath 只会给你路径。
Console.WriteLine(uri.PathAndQuery);
// or 
Console.WriteLine(uri.AbsolutePath);

...对以下两种情况都输出如下结果...

/foo/bar


PathAndQuery不包括Fragment,例如"http://example.com/q?x=y#123"将只给出"/q?x=y"。 - huang

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。这是一个解决向后跳转的方法。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接