Capisco perfettamente questa è "tecnicamente" un filo JavaScript
. Ma se sei come me e sei arrivato qui da Google "come analizzare l'intestazione del link" Ho pensato di condividere la mia soluzione per il mio ambiente (C#).
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 FromHeader(string linkHeader)
{
LinkHeader linkHeader = null;
if (!string.IsNullOrWhiteSpace(linkHeader))
{
string[] linkStrings = linkHeader.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;
}
}
test in una console app, utilizzando intestazione esempio link di GitHub:
void Main()
{
string link = "<https://api.github.com/user/repos?page=3&per_page=100>; rel=\"next\",< https://api.github.com/user/repos?page=50&per_page=100>; rel=\"last\"";
LinkHeader linkHeader = LinkHeader.FromHeader(link);
}
grande, grazie! – toxinlabs
Vale la pena notare che mentre questo fa il trucco per l'utilizzo di GitHub, questo non è un parsing pienamente affidabile di qualsiasi intestazione di Link. Le divisioni di stringa non sono sufficienti; per esempio. '; =' è permesso all'interno degli URL, e anche ',' è consentito all'interno dei valori se i valori sono quotati.Orribilmente complesso Specifiche: http://www.rfc-editor.org/rfc/rfc5988.txt –