private void ExtractHeaderLinks(HttpResponseHeaders responseHeaders, SemanticsRegistry linkFactory) { _HeaderLinks = new List<Link>(); foreach (var header in responseHeaders.Where(h => h.Key.ToLowerInvariant() == "link")) { var links = header.Value.First(); foreach (Match match in LinkHeaderParser.Matches(links)) { string relation = null; if (match.Groups["rel"].Success) { relation = match.Groups["rel"].Value; } var link = linkFactory.CreateLink(relation); link.Target = new Uri(match.Groups["href"].Value, UriKind.RelativeOrAbsolute); _HeaderLinks.Add(link); } } }
private static Dictionary<string, string> GetRpcHeaders(HttpResponseHeaders headers) { return headers .Where(it => it.Key.StartsWith(HeadPrefix)) .ToDictionary(item => item.Key.Substring(HeadPrefix.Length, item.Key.Length - HeadPrefix.Length), item => item.Value.FirstOrDefault()); }
private Uri NextPageUriFromHeaders(HttpResponseHeaders headers) { var linkHeader = headers .Where(t => "Link".Equals(t.Key, StringComparison.OrdinalIgnoreCase)) .SelectMany(t => t.Value) .FirstOrDefault(); if(linkHeader==null) return null; var match = NextLinkPattern.Match(linkHeader); if(!match.Success) return null; return new Uri(match.Groups[1].Value); }