Path.Combine很方便,但在.NET框架中是否有类似的URL功能?
我正在寻找这样的语法:
Url.Combine("http://MyUrl.com/", "/Images/Image.jpg")
Run Code Online (Sandbox Code Playgroud)
将返回:
"http://MyUrl.com/Images/Image.jpg"
我想知道是否其他人可以根据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();
}
Run Code Online (Sandbox Code Playgroud)
例如,这给出了:
./foo -> foo
foo/./bar -> foo/bar
foo/../bar -> bar
Run Code Online (Sandbox Code Playgroud)
使它如此尴尬的问题是,Uri它本身似乎并没有简化相对的URL,而且MakeRelativeUri仅适用于绝对URL。因此,为了诱使Uri类执行我想要的操作,我构造了具有适当数量的嵌套的基本URL。
我也可以使用System.IO.Path,但是随后我必须搜索并替换反斜杠来斜杠...
必须有更好的方法,对吗?