tôi hoàn toàn hiểu được điều này là "kỹ thuật" a thread JavaScript
. Nhưng, nếu bạn giống tôi và đến đây bằng cách Google'ing "cách phân tích cú pháp tiêu đề Liên kết" Tôi nghĩ tôi sẽ chia sẻ giải pháp của mình cho sự tham gia của tôi (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;
}
}
kiểm tra trong một ứng dụng giao diện điều khiển, sử dụng tiêu đề ví dụ liên kết GitHub của:
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);
}
tuyệt vời, cảm ơn bạn! – toxinlabs
Điều đáng lưu ý là mặc dù điều này có lợi cho việc sử dụng GitHub, đây không phải là một phân tích cú pháp hoàn toàn mạnh mẽ của bất kỳ tiêu đề Liên kết nào. Phân chia chuỗi không đủ; ví dụ. '; =' được cho phép trong các URL, và thậm chí ',' được cho phép trong các giá trị nếu các giá trị được trích dẫn.Phức tạp khủng khiếp. Spec: http://www.rfc-editor.org/rfc/rfc5988.txt –