级联url字符串

本文关键字:字符串 url 级联 | 更新日期: 2023-09-27 18:15:09

来自这个问题,我正在寻找一种方法来级联像Path.Combine的url,用于文件系统做,包括路径参数

我的输入是以下3个参数:

string host = "test.com"; //also possilbe: "test.com/"
string path = "/foo/"; //also possilbe: "foo", "/", "","/foo","foo/"
string file = "test.temp"; //also possilbe: "/test.temp"

预期结果为

http://test.com/foo/test.temp

这是我能找到的最好的方法,但它并不适用于所有情况:

Uri myUri = new Uri(new Uri("http://" + host +"/"+ path), file);

级联url字符串

您可以尝试使用Uri.TryCreate():

Uri uri;
bool success = Uri.TryCreate(new Uri("http://" + host), path.Trim('/') + "/" + file.Trim('/'), out uri);

如果url的格式不正确,将返回false。但是,如果您确信格式是正确的,则可以使用Uri构造函数:

var uri = new Uri(new Uri("http://" + host), path.Trim('/') + "/" + file.Trim('/'));

您可以使用UriBuilder类+ IO.Path.Combine作为Path:

var builder = new UriBuilder();
builder.Host = host.Trim('/');
builder.Path = Path.Combine(path.Trim('/'), file.Trim('/'));
string result = builder.ToString();  // "http://test.com/foo/test.temp"

如果您想要Uri - instance,只需使用UriBuilderUri -property。

给你

string url = string.Join("/", new[] { host, path, file }.Select(x => x.Trim('/'))
.Where(x => !String.IsNullOrEmpty(x)));