Skip to content

Instantly share code, notes, and snippets.

Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save Digitalroot/e9ca35596664fccd13494cf2da975aa2 to your computer and use it in GitHub Desktop.
Save Digitalroot/e9ca35596664fccd13494cf2da975aa2 to your computer and use it in GitHub Desktop.
C# Parse Link Header
public class LinkHeader
{
public string FirstLink { get; set; }
public string PrevLink { get; set; }
public string NextLink { get; set; }
public string LastLink { get; set; }
public static LinkHeader CreateInstance(HttpResponseMessage httpResponseMessage)
{
if (httpResponseMessage.Headers.Contains("Link"))
{
return CreateInstance(httpResponseMessage.Headers.GetValues("Link").FirstOrDefault());
}
return null;
}
public static LinkHeader CreateInstance(string linkHeaderStr)
{
LinkHeader linkHeader = null;
if (!string.IsNullOrWhiteSpace(linkHeaderStr))
{
string[] linkStrings = linkHeaderStr.Split(',');
if (linkStrings != null && linkStrings.Any())
{
linkHeader = new LinkHeader();
foreach (string linkString in linkStrings)
{
var relMatch = Regex.Match(linkString, "(?<=rel=\").+?(?=\")", RegexOptions.IgnoreCase);
var linkMatch = Regex.Match(linkString, "(?<=<).+?(?=>)", RegexOptions.IgnoreCase);
if (relMatch.Success && linkMatch.Success)
{
string rel = relMatch.Value.ToUpper();
string link = linkMatch.Value;
switch (rel)
{
case "FIRST":
linkHeader.FirstLink = link;
break;
case "PREV":
linkHeader.PrevLink = link;
break;
case "NEXT":
linkHeader.NextLink = link;
break;
case "LAST":
linkHeader.LastLink = link;
break;
}
}
}
}
}
return linkHeader;
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment