我有一個函數可以從各種網頁資源中提取URL。不用說,有些是完全有效的URL,有些是相對於頁面的HTML而言的。下面是我的asp.net/c#邏輯我派生用於檢查的URL,然後生成一個完全可用的網址從什麼拉從網站...用於修復相關網址到完整網址的asp.net邏輯
我有沒有看過這段代碼在一段時間,但我記得它幾個月前運行良好,現在需要很多調整才能運行 - 尤其是在相對路徑以及從各種相對變化中重新生成完整網址時。
有沒有比我在這裏更簡單的方法或方法來完成這個看似路由的樣板任務?
注: origianlurl是第一個搜索頁面的完整URL,並且relativeUrl是搜索頁面中發現了一個網址(也可以是一個完整的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;
}
爲什麼投下這個問題呢? – kacalapy 2010-11-17 15:43:59