我有一个函数可以从各种网页资源中提取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