public ArticleModel(DocumentationPage page, TableOfContents tableOfContents) { Key = page.Key; TableOfContents = tableOfContents; Title = page.Title; HtmlContent = page.HtmlContent; }
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; }