У меня есть функция, которая извлекает URL-адреса из различных веб-ресурсов.Излишне говорить, что некоторые из них являются полными действительными URL-адресами, а некоторые относительны в соответствии с HTML-кодом страницы.ниже приведена моя логика asp.net/c #, которую я извлек для изучения URL-адреса, а затем сгенерировал полностью пригодный для использования URL-адрес из того, что извлечено с сайта ...
Я некоторое время не просматривал этот код, нопомните, что он работал хорошо несколько месяцев назад, и теперь ему нужно было много настроек, особенно с относительными путями и регенерацией ПОЛНОГО URL из различных относительных вариаций.
существует ли более простой способ или метод для выполнения этой, казалось бы, стандартной задачи маршрутизации, чем у меня здесь?
ПРИМЕЧАНИЕ: origianlurl - это полный URL первой поисковой страницы, аlativeUrl - это URLнаходится на странице поиска (это может быть полный сайт www.site.com или /contactus.html)
private string ResolveRelativePaths(string relativeUrl, string originatingUrl)
{
if (relativeUrl.StartsWith("http") || relativeUrl.StartsWith("www"))
return relativeUrl;
if (relativeUrl.StartsWith("/"))
{
//get main url something.com
Uri myURI = new Uri(originatingUrl);
//add the relative page to the end
return myURI.Host + relativeUrl;
}
string resolvedUrl = String.Empty;
string[] relativeUrlArray = relativeUrl.Split(new char[] { '/' }, StringSplitOptions.RemoveEmptyEntries);
string[] originatingUrlElements = originatingUrl.Split(new char[] { '/' }, StringSplitOptions.RemoveEmptyEntries);
int indexOfFirstNonRelativePathElement = 0;
for (int i = 0; i <= relativeUrlArray.Length - 1; i++)
{
if (relativeUrlArray[i] != "..")
{
indexOfFirstNonRelativePathElement = i;
break;
}
}
int countOfOriginatingUrlElementsToUse = originatingUrlElements.Length - indexOfFirstNonRelativePathElement - 1;
//for (int i = 0; i <= countOfOriginatingUrlElementsToUse - 1; i++)
for (int i = 0; i <= countOfOriginatingUrlElementsToUse ; i++)
{
if (originatingUrlElements[i] == "http:" || originatingUrlElements[i] == "https:")
resolvedUrl += originatingUrlElements[i] + "//";
else
resolvedUrl += originatingUrlElements[i] + "/";
}
for (int i = 0; i <= relativeUrlArray.Length - 1; i++)
{
if (i >= indexOfFirstNonRelativePathElement)
{
resolvedUrl += relativeUrlArray[i];
if (i < relativeUrlArray.Length - 1)
resolvedUrl += "/";
}
}
return resolvedUrl;
}