private async Task <ActionResult <List <CloudEvent> > > RetrieveAndAuthorizeEvents(string after, DateTime?from, DateTime?to, int party, List <string> source, List <string> type, int size) { try { List <CloudEvent> events = await _eventsService.Get(after, from, to, party, source, type, size); if (events.Count > 0) { events = await _authorizationHelper.AuthorizeEvents(HttpContext.User, events); } if (events.Count > 0) { StringBuilder nextUriBuilder = new StringBuilder($"{_eventsBaseUri}{Request.Path}?after={events.Last().Id}"); List <KeyValuePair <string, string> > queryCollection = Request.Query .SelectMany(q => q.Value, (col, value) => new KeyValuePair <string, string>(col.Key, value)) .Where(q => q.Key != "after") .ToList(); foreach (KeyValuePair <string, string> queryParam in queryCollection) { nextUriBuilder.Append($"&{queryParam.Key}={queryParam.Value}"); } Response.Headers.Add("next", nextUriBuilder.ToString()); } return(events); } catch (Exception e) { return(StatusCode(500, $"Unable to get cloud events from database. {e}")); } }