[英]Library function to generate URL from an ASP.Net Web API controller?
[英]How to generate HATEOAS links for paging in ASP.NET Core 6 Web API controller to return in Link header?
我需要為第一個、最后一個、下一個和上一個創建 HATEOAS 分頁鏈接,並將它們添加到響應的Link
頭中。
一個PagedResultDTO
從應用層返回給 API 層的控制器。 除了記錄之外,它還包含有關TotalCount
、 PageNumber
、 PageSize
和PageCount
的信息。
我對框架提供的選項感到困惑。 許多帖子使用UriHelper
,但似乎LinkGenerator
是較新的當前助手類。 查看文檔,我不明白LinkGenerator
提供的各種方法的區別。 有什么好的帖子可以解釋各種方法的用例嗎?
由於請求可以具有各種其他查詢參數,例如用於排序、過濾、搜索、嵌入,因此需要在創建鏈接時保留並返回它們。 例如,控制器聲明可能如下所示:
public ActionResult<PagedResultDTO<GetCountriesDTO>> GetCountries(
[FromHeader(Name = "If-None-Match")] string? eTags,
[CommaSeparated] IEnumerable<string> languages,
string? sort,
string? search,
int? pageNumber,
int? pageSize)
( [CommaSeperated]
是一個擴展,它接受以逗號分隔的多個值並創建一個列表而無需重復查詢參數。如果未設置 pageNumber 和 pageCount 並且在特定控制器方法中未設置默認值,我的用例處理程序將設置默認值。)
對於像這樣的請求:
GET https://example.com/api/countries?languages=de-DE,en-US&sort=name
我需要生成:
<https://example.com/api/countries?languages=de-DE,en-US&sort=name&pageNumber=2&pageSize=20>; rel="next",
<https://example.com/api/countries?languages=de-DE,en-US&sort=name&pageNumber=1&pageSize=20>; rel="first",
<https://example.com/api/countries?languages=de-DE,en-US&sort=name&pageNumber=10&pageSize=20>; rel="last"
所有與分頁無關的查詢參數都需要保存在生成的鏈接中。 LinkGenerator
是否支持直接生成這些分頁鏈接的方法? 是否已經有任何結構支持Link
標頭格式? 我想知道是否應該使用Request
對象手動創建鏈接?
我現在使用包含傳遞的查詢參數的字典創建了自己的代碼。
Dictionary<string, string> query = new();
foreach (KeyValuePair<string, StringValues> item in httpContext.Request.Query)
{
query.Add(item.Key, string.Join(",", item.Value));
}
然后我為每個鏈接更新pageNumber
和pageSize
。 如果之前未設置並使用默認值,則添加參數,例如:
query["pageNumber"] = "1";
query["pageSize"] = pageSize.ToString();
然后我使用LinkGenerator
創建鏈接:
linkGenerator.GetUriByAction(httpContext, values: query)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.