public async Task <bool> IsValidLinkAsync(string link) { var match = linkValidationExpression.Match(link); if (!match.Success) { return(false); } var domain = match.Groups[1].Value; return(linkValidationExpression.IsMatch(link) && await domainNameResolver.IsValidDomainAsync(domain)); }
public async Task <bool> IsValidLinkAsync(string link) { if (link.Length > 1024) { return(false); } if (link.StartsWith(".")) { return(false); } if (link.Count(x => x == '.') == 0) { return(false); } if (link.Contains("..")) { return(false); } var domain = link; if (domain.StartsWith("http://")) { domain = domain.Substring("http://".Length); } if (domain.StartsWith("https://")) { domain = domain.Substring("https://".Length); } var pathOrQueryIndex = domain.IndexOfAny(new[] { '?', '&', '/' }); if (pathOrQueryIndex != -1) { domain = domain.Substring(0, pathOrQueryIndex); } return(await domainNameResolver.IsValidDomainAsync(domain)); }