private async Task <IEnumerable <JiraIssueModel> > JiraPostSearch(string queryString, int retry = 3) { await EnsureAuthentication(); var query = new JiraSearchQuery { Jql = queryString, Fields = JiraIssueFieldsArray, StartAt = 0 }; JiraSearchResultModel searchResult; List <JiraIssueModel> issues = null; //This loop is necessary since the maxResults per query are limited by a Jira setting. do { searchResult = await HttpPostQuery(query); if (issues == null) //Has to be initialized after we know how many results there are to avoid reallocating the list { issues = new List <JiraIssueModel>(searchResult.Total); } foreach (JiraIssueModel issue in searchResult.Issues) { issue.Url = settings.JiraIssueUrl + issue.Key; issues.Add(issue); } query.StartAt += searchResult.MaxResults; } while (query.StartAt < searchResult.Total); return(issues); }
private async Task <JiraSearchResultModel> HttpPostQuery(JiraSearchQuery query) { HttpResponseMessage response = await client.PostAsync(settings.JiraApiSearchUrl, new StringContent(JsonConvert.SerializeObject(query, CamelCaseJsonSettings), Encoding.UTF8, "application/json")); if (!response.IsSuccessStatusCode) { throw new HttpRequestException($"Jira api call {response.RequestMessage.RequestUri} returned status code {response.StatusCode}"); } return(await response.Content.ReadAsAsync <JiraSearchResultModel>()); }