从URL字符串中删除父路径的最快,最干净的方法是什么?

Dea*_*ane 1 c# string url

在C#中,是否有任何内置方法来"纠正"其中包含父路径的URL?所以,我想接受这个:

/foo/bar/../baz.html
Run Code Online (Sandbox Code Playgroud)

把它变成......

/foo/baz.html
Run Code Online (Sandbox Code Playgroud)

("bar"目录在路径中被".."否定.)

我试图手动滚动它,但逻辑非常难看,非常快.考虑类似的事情:

/foo1/foo2/../foo3/foo4/foo5/../../bar.html
Run Code Online (Sandbox Code Playgroud)

我向前走的路径是逐段移动URL,然后开始编写新的URL.如果第2段不是"..",我只会在新网址中包含第1段.但是,在上面的例子中,我需要"向前看"并弄清楚我有多少父路径.

我试图使用Path.GetFullPath,它在技术上得到了它的工作,但是,伙计,它很难看.公平警告:你可能想避开这个:

Path.GetFullPath(myUrl).Replace(Path.GetFullPath(@"\"), "").Replace(@"\", "/") + "/";
Run Code Online (Sandbox Code Playgroud)

GetFullPath从"C:\"根返回一个文件系统路径,所以你基本上必须替换它,而不是转换斜杠等.

我最终可能会把它打破(我的丑陋代码在技术上可行),但是我觉得我不能成为第一个尝试这个的人.谷歌没有帮助.

(另一种语言的答案也会有所帮助 - 至少它会显示逻辑.)

San*_*nen 6

这适用于所有URL(包括带有QueryString的URL):

var url = "/foo/bar/../bar.html";
var ubuilder = new UriBuilder();
ubuilder.Path = url;
var newURL = ubuilder.Uri.LocalPath;
Run Code Online (Sandbox Code Playgroud)