【发布时间】:2016-09-02 20:47:40
【问题描述】:
我想知道其他人是否可以根据System.Uri 或标准.NET 框架中可用的其他方法提出一种更好的方法来简化相对URL。我的尝试有效,但非常可怕:
public static String SimplifyUrl(String url)
{
var baseDummyUri = new Uri("http://example.com", UriKind.Absolute);
var dummyUri = new Uri(baseDummyUri , String.Join("/",
Enumerable.Range(0, url.Split(new[] { ".." }, StringSplitOptions.None).Length)
.Select(i => "x")));
var absoluteResultUri = new Uri(dummyUri, url);
var resultUri = dummyUri.MakeRelativeUri(absoluteResultUri);
return resultUri.ToString();
}
这给出了,例如:
./foo -> foo
foo/./bar -> foo/bar
foo/../bar -> bar
使这变得如此尴尬的问题是Uri 本身似乎并不能简化相对 URL,MakeRelativeUri 也只适用于绝对 URL。因此,为了欺骗Uri 类做我想做的事,我构造了一个具有适当嵌套数量的基本 URL。
我也可以使用System.IO.Path,但我必须搜索并将反斜杠替换为斜杠...
一定有更好的方法,对吧?
【问题讨论】:
-
你能举例说明你的意思吗?您要简化的 url 是什么,简化后的 url 是什么?
-
@ScottHannen 添加了示例。
-
我认为您的解决方案很棒。这可能是进行替换的最简单方法。