我正在开发一个 C# 项目,我需要将基本 URL 与各种端点结合起来。但是,当端点有前导斜杠时,我遇到了问题。例如:
string baseUrl = "https://example.com/api/v1/";
string endpoint = "/sessions/logon/";
Uri baseUri = new Uri(baseUrl);
Uri fullUri = new Uri(baseUri, endpoint);
Console.WriteLine(fullUri);
此代码产生
https://example.com/sessions/logon
,而不是预期的 https://example.com/api/v1/sessions/logon
。端点中的前导斜杠使其覆盖基本 URL 路径。
是否有一种强大的方法来组合正确处理前导/尾随斜杠的 URI?
我想出了一个解决方案,涉及创建一个扩展方法来处理这种情况。这是我开发的扩展方法:
public static class UriExtension
{
public static Uri Combine(this Uri baseUri, params string[] endpoints)
{
// Convert baseUri to string, trim it, and ensure it ends with a slash
string baseUrl = baseUri.ToString().TrimEnd('/') + "/";
// Trim each endpoint and join them with slashes
string combinedPath = string.Join("/", endpoints.Select(e => e.Trim('/')));
Uri fullUri = new Uri(new Uri(baseUrl), combinedPath);
return fullUri;
}
}
用法
以下是我在代码中使用此扩展方法的方法。我将端点分成几个部分只是为了用斜杠说明问题:
Uri baseUri = new Uri("https://example.com/api/v1/");
string[] endpoints = { "/sessions/", "/logon/" };
Uri fullUri = baseUri.Combine(endpoints);
Console.WriteLine(fullUri);
此方法确保无论 URI 开头或结尾是否有斜杠,它们都会正确组合成
https://example.com/api/v1/sessions/logon/
。
这个解决方案对我来说效果很好,可以优雅地处理前导斜杠和尾随斜杠的所有变化。