public async override Task<IActionResult> ListFunctionsAsync([FromQuery]int page, [FromQuery][Range(1, 20)]int size, [FromQuery]bool includeRelations, [FromQuery][StringLength(255, MinimumLength = 0)]string filterName, [FromQuery]string orderBy) { List<KeyValuePair<string, string>> orderByKeyValueList = orderByHelper.ConvertCommaSeparateOrderByStringToKeyValuePairList(orderBy); // Validate only correct order by components were supplied. orderByHelper.ValidateOrderByListOnlyContainsCertainElements(orderByKeyValueList, new List<string> { "name" }); PaginatedResult<FunctionModel> paginatedResult = await functionService.GetPaginatedListAsync(page, size, includeRelations, filterName, orderByKeyValueList); // Generate a K-V pair of all the current applied filters sent to the controller so that pagination header URLs can include them. List<KeyValuePair<string, string>> currrentFilters = new List<KeyValuePair<string, string>> { new KeyValuePair<string, string>("includeRelations", includeRelations ? "true" : "false"), new KeyValuePair<string, string>("filterName", filterName) }; paginationHelper.AddPaginationHeaderMetaDataToResponse(paginatedResult, currrentFilters, orderBy, "ListFunctions", Url, Response); return Ok(mapper.Map<List<Function>>(paginatedResult.Results)); }