如何在 C# 中稳健地组合 URI 来处理前导/尾随斜杠?

问题描述 投票:0回答:1

我正在开发一个 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?

c# asp.net .net url uri
1个回答
0
投票

我想出了一个解决方案,涉及创建一个扩展方法来处理这种情况。这是我开发的扩展方法:

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/

这个解决方案对我来说效果很好,可以优雅地处理前导斜杠和尾随斜杠的所有变化。

© www.soinside.com 2019 - 2024. All rights reserved.