在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:\"根返回一个文件系统路径,所以你基本上必须替换它,而不是转换斜杠等.
我最终可能会把它打破(我的丑陋代码在技术上可行),但是我觉得我不能成为第一个尝试这个的人.谷歌没有帮助.
(另一种语言的答案也会有所帮助 - 至少它会显示逻辑.)
这适用于所有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)