public IActionResult Get([FromQuery(Name = "sortDirection")] string sortDirection = "asc", [FromQuery(Name = "sortField")] string sortField = "Time", [FromQuery(Name = "filterFields")] string filterFields = null, [FromQuery(Name = "filterValues")] string filterValues = null, [FromQuery(Name = "pageNumber")] int pageNumber = 0, [FromQuery(Name = "pageItems")] int pageItems = 10, [FromBody] NullableGuidDeserializer nullableUserId = null) { Guid?userId = nullableUserId.Property; Sort sort = ParseQuery.ParseSort(sortDirection, sortField); Page page = ParseQuery.ParsePage(pageNumber, pageItems); List <Filter> filters; try { filters = ParseQuery.ParseFilters(filterFields, filterValues); } catch (Exception e) { Failure failure = FailureFact.UnevenFilters(e, userId, filterValues, filterFields); db.InsertRecordAsync(FAILURE_TABLE, failure); return(BadRequest(failure)); } List <Review> records; try { records = db.LoadRecords <Review>(REVIEW_TABLE, filters, sort, page); } catch (Exception e) { Failure failure = FailureFact.Default(e, userId); db.InsertRecordAsync(FAILURE_TABLE, failure); return(StatusCode(500, failure)); } if (records.Count == 0) { Failure failure = FailureFact.NoRecordsFound(null, userId, sort, filters, page); db.InsertRecordAsync(FAILURE_TABLE, failure); return(NotFound(failure)); } List <PartialReview> partialRecords = new List <PartialReview>(); foreach (Review record in records) { partialRecords.Add(record.ToPartialReview()); } Success success = SuccessFact.ReviewsRetrieved(userId, sort, filters, page); db.InsertRecordAsync(SUCCESS_TABLE, success); return(new OkObjectResult(partialRecords)); }