コード例 #1
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);
        }
コード例 #2
0
        private PageLinksValidationResult ValidatePageLinks(HttpClient client, DocumentationPage page)
        {
            void ValidateLinks(HttpClient httpClient, List <HtmlNode> toValidate, Uri baseUri, PageLinksValidationResult results)
            {
                foreach (var link in toValidate)
                {
                    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(baseUri + href, UriKind.Absolute);
                            var indexOfHash = uri.AbsoluteUri.IndexOf("#", StringComparison.InvariantCultureIgnoreCase);
                            if (indexOfHash != -1)
                            {
                                var potentialGuid = uri.AbsoluteUri.Substring(indexOfHash + 1);
                                if (Guid.TryParse(potentialGuid, out Guid _))
                                {
                                    continue;
                                }
                            }

                            isValid = ValidatePageLink(httpClient, uri);
                        }

                        results.Links[$"[{link.InnerText}][{uri}]"] = isValid;
                    }
                    catch (Exception)
                    {
                        results.Links[href] = false;
                    }
                }
            }

            var result = new PageLinksValidationResult(page.Key, page.Language == Language.All ? _currentLanguage : page.Language, page.Version);

            var htmlDocument    = HtmlHelper.ParseHtml(page.HtmlContent);
            var linksToValidate = new List <HtmlNode>();

            var links = htmlDocument.DocumentNode.SelectNodes("//a[@href]");

            if (links != null)
            {
                linksToValidate.AddRange(links);
            }

            if (string.IsNullOrWhiteSpace(page.RelatedArticlesContent) == false)
            {
                htmlDocument = HtmlHelper.ParseHtml(page.RelatedArticlesContent);
                links        = htmlDocument.DocumentNode.SelectNodes("//a[@href]");
                if (links != null)
                {
                    linksToValidate.AddRange(links);
                }
            }

            if (linksToValidate.Count == 0)
            {
                return(result);
            }

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

            ValidateLinks(client, linksToValidate, currentUri, result);

            return(result);
        }