public async Task <ActionResult <ResourceCollection <FolderResource> > > GetAsync( [FromQuery] int limit = 100, [FromQuery] string nextPageToken = "") { try { var query = new ReadFoldersQuery(limit, nextPageToken); var response = await mediator.Send(query); var folders = response.Items.Select(x => new FolderResource(x)).ToArray(); foreach (var folder in folders) { folder.EnrichWithLinks(this); } var foldersCollection = new ResourceCollection <FolderResource>(folders, response.NextPageToken); foldersCollection.AddLinks( new Link("self", this.Url.Link("GetFolders", new { Limit = limit, NextPageToken = nextPageToken })), response.NextPageToken != null ? new Link("next", this.Url.Link("GetFolders", new { Limit = limit, NextPageToken = response.NextPageToken })) : new Link("next", null), new Link("post", this.Url.Link("CreateFolder", null)) ); return(foldersCollection); } catch (InvalidNextPageTokenRequestException) { return(BadRequest(new { Message = "The provided Next Page Token is invalid." })); } }