public static bool TryParse(string linkHeaderValue, out WebLink result) { var fields = linkHeaderValue.Split(';').Select(x => x.Trim()).ToList(); var linkValue = fields.First().TrimStart('<').TrimEnd('>'); var relTypes = new List <string>(); var mediaTypes = new List <string>(); foreach (var field in fields) { var split = field.Split(new char[] { '=' }, 2); if (split.Length == 2) { var key = split[0].Trim(); var value = split[1].Trim(); if (key.Equals("rel")) { value = value.Trim('"'); relTypes.AddRange(value.Split(' ')); } else if (key.Equals("type")) { value = value.Trim('"'); mediaTypes.Add(value); } } } result = new WebLink { LinkValue = linkValue, RelationTypes = relTypes, MediaTypes = mediaTypes }; return(true); }
public void ParseSimpleLinkHeader() { var isValid = WebLink.TryParse("<http://example.org/foo.json>", out var link); Assert.True(isValid); Assert.Equal("http://example.org/foo.json", link.LinkValue); }
public void ItCanParseAQuotedMediaType() { var isValid = WebLink.TryParse("<http://example.org/foo.json>;type=\"application/ld+json\"", out var link); Assert.True(isValid); Assert.Equal(new[] { "application/ld+json" }, link.MediaTypes); }
public void ItCanParseMultipleValuesFromTheRelField() { var isValid = WebLink.TryParse("<http://example.org/foo.json>;rel=\"rel1 rel2\"", out var link); Assert.True(isValid); Assert.Equal(new[] { "rel1", "rel2" }, link.RelationTypes); }
private static IEnumerable <WebLink> ParseLinkHeaders(IEnumerable <string> linkHeaderValues) { foreach (var linkHeaderValue in linkHeaderValues) { if (WebLink.TryParse(linkHeaderValue, out var link)) { yield return(link); } } }
public void ItCanParseMultipleFields() { var isValid = WebLink.TryParse("<http://example.org/foo.json>;type=\"application/ld+json\";rel=alternate", out var link); Assert.True(isValid); Assert.Equal(new[] { "application/ld+json" }, link.MediaTypes); Assert.Equal(new string[] { "alternate" }, link.RelationTypes); Assert.Equal("http://example.org/foo.json", link.LinkValue); }