コード例 #1
0
ファイル: ArticleModel.cs プロジェクト: modulexcite/docs-8
 public ArticleModel(DocumentationPage page, TableOfContents tableOfContents)
 {
     Key = page.Key;
     TableOfContents = tableOfContents;
     Title = page.Title;
     HtmlContent = page.HtmlContent;
 }
コード例 #2
0
		private PageLinksValidationResult ValidatePageLinks(HttpClient client, DocumentationPage page, IList<DocumentationPage> pages)
		{
			var result = new PageLinksValidationResult(page.Key, page.Language == Language.All ? _currentLanguage : page.Language, page.Version);

			var htmlDocument = HtmlHelper.ParseHtml(page.HtmlContent);
			var links = htmlDocument.DocumentNode.SelectNodes("//a[@href]");
			if (links == null)
				return result;

			var currentUri = new Uri(_options.RootUrl + page.Key + "/../");

			foreach (var link in links)
			{
				var hrefAttribute = link.Attributes["href"];
				var href = hrefAttribute.Value.Trim();

				try
				{
					var isValid = false;
					Uri uri = null;
					if (string.IsNullOrEmpty(href) == false)
					{
						uri = href.StartsWith("http") ? new Uri(href, UriKind.Absolute) : new Uri(currentUri + href, UriKind.Absolute);
						var indexOfHash = uri.AbsoluteUri.IndexOf("#", StringComparison.InvariantCultureIgnoreCase);
						if (indexOfHash != -1)
						{
							var potentialGuid = uri.AbsoluteUri.Substring(indexOfHash + 1);
							Guid guid;
							if (Guid.TryParse(potentialGuid, out guid))
								continue;
						}

						isValid = ValidatePageLink(client, uri);
					}

					result.Links[string.Format("[{0}][{1}]", link.InnerText, uri)] = isValid;
				}
				catch (Exception)
				{
					result.Links[href] = false;
				}
			}

			return result;
		}