Path.Combine для URL-адресов?

Path.Combine удобен, но есть ли аналогичная функция в платформе .NET для URL-адрес?

Я ищу синтаксис вот так:

Url.Combine("http://MyUrl.com/", "/Images/Image.jpg")

который вернется:

"http://MyUrl.com/Images/Image.jpg"

+1168
источник поделиться
37 ответов
  • 1
  • 2

Обе эти работы:

  Uri final = new Uri(Regex.Replace(baseUrl + "/" + relativePath, "(?<!http:)/{2,}", "/"));

Или же

  Uri final =new Uri(string.Format("{0}/{1}", baseUrl.ToString().TrimEnd('/'), relativePath.ToString().TrimStart('/')));

Т.е. если

baseUrl = "http://tesrurl.test.com/Int18"

а также

relativePath = "To_Folder"

output = http://tesrurl.test.com/Int18/To_Folder

Некоторые ошибки появятся для кода ниже:

 // If you use the below code, some issues will be there in the final URI
 Uri final = new Uri(baseUrl, relativePath);
0
источник

Простой один вкладыш:

public static string Combine(this string uri1, string uri2) => $"{uri1.TrimEnd('/')}/{uri2.TrimStart('/')}";

Вдохновленный ответом @Matt Sharpe.

0
источник

Мы используем следующий простой вспомогательный метод для объединения произвольного количества частей URL:

public static string JoinUrlParts(params string[] urlParts)
{
    return string.Join("/", urlParts.Where(up => !string.IsNullOrEmpty(up)).ToList().Select(up => up.Trim('/')).ToArray());
}

Обратите внимание, что он не поддерживает '../../something/page.htm'-style относительные URL!

0
источник

Для тех, кто ищет однострочник и просто хочет соединить части пути, не создавая новый метод, не ссылаясь на новую библиотеку, не создавая значение URI и не преобразовывая его в строку, тогда...

string urlToImage = String.Join("/", "websiteUrl", "folder1", "folder2", "folder3", "item");

Это довольно просто, но я не понимаю, что тебе еще нужно. Если вы боитесь удвоить '/', тогда вы можете просто сделать .Replace("//", "/") потом. Если вы боитесь заменить двойное "//" в "https://", вместо этого сделайте одно объединение, замените двойное "/", а затем присоединитесь к URL-адресу веб-сайта (однако я уверен, что большинство браузеров автоматически преобразовать что-нибудь с "https:" перед ним, чтобы прочитать в правильном формате). Это будет выглядеть так:

string urlToImage = String.Join("/","websiteUrl", String.Join("/", "folder1", "folder2", "folder3", "item").Replace("//","/"));

Здесь есть множество ответов, которые помогут справиться со всем вышеперечисленным, но в моем случае он мне понадобился только один раз в одном месте, и мне не нужно было на него сильно полагаться. Кроме того, действительно легко увидеть, что здесь происходит.

Видеть: https://docs.microsoft.com/en-us/dotnet/api/system.string.join?view=netframework-4.8

0
источник

Я должен указать, что Path.Combine кажется, работает для этого также напрямую, по крайней мере, в .NET 4.

-1
источник

Nalarium.Url в пакете Nalarium NuGet делает именно это.

Подпись:

public static String Join(params String[] parameterArray)

Следовательно, вы можете сделать это (предположим, что переменные из базы данных или что-то):

Nalarium.Url.Join("https://domain", id, resource, version, parameters);

Clean.

Это params, поэтому вы можете добавлять параметры по мере необходимости.

-1

Я еще не использовал следующий код, но нашел его во время моих интернет-путешествий, чтобы решить проблему с объединением URL-адресов - надеясь, что это будет кратким (и успешным!) ответом:

VirtualPathUtility.Combine
-2
источник
  • 1
  • 2

Посмотрите другие вопросы по меткам или Задайте вопрос