在UriBuilder中删除Path的最左部分

时间:2019-01-21 15:46:02

标签: c# .net

我需要删除URL中路径的最左边部分。例如:

http://mywebsite.com/part1/part2/part3

预期结果:

http://mywebsite.com/part2/part3

我想以最易读的方式完成此操作,例如使用 UriBuilder
我看到它具有属性Path,但是有没有一种方法可以操纵路径而不必使用某种形式的修剪和切割字符串本身呢?

3 个答案:

答案 0 :(得分:3)

使用UriBuilder和一些字符串操作就足够容易了:

var builder = new UriBuilder("http://mywebsite.com/part1/part2/part3");
builder.Path = builder.Path.Substring(builder.Path.IndexOf('/',1));
Console.WriteLine(builder.Uri);

实时示例:https://rextester.com/SXA2367

答案 1 :(得分:2)

最后一个答案,提到URI.Segments属性,该属性返回所有已经方便地分割为字符串数组的路径部分,如果新URI应该由不同部分组成,这可能会派上用场。
在某些情况下,它可以提供更多的灵活性。

在这种情况下,Segments数组是:

{string[4]}
    [0]: "/"
    [1]: "part1/"
    [2]: "part2/"
    [3]: "part3"

因此,在这种情况下,Path的构建方式如下:

var builder = new UriBuilder("http://mywebsite.com/part1/part2/part3");
builder.Path = string.Concat(builder.Uri.Segments.Skip(2));

builder.URI.AbsolutePath将为:

http://mywebsite.com/part2/part3

答案 2 :(得分:-1)

仅使用UriBuilder

是不可能的

我做的最干净的方法是在下面的UriBuilder上使用扩展方法,这是我很快就提出的一个例子

public static UriBuilder RemoveFirstPartOfPath(this UriBuilder b)
{
    var s = b.Path.Split('/');
    var shorter = s.Skip(1);
    b.Path = string.Join("/", shorter);
    return b;
}