示例#1
0
        public async Task <IResultEnumerable <T> > RunAsync <T>(QuerySpec querySpec)
        {
            var client = HttpClientFactory.NewClient();

            try
            {
                client.DefaultRequestHeaders.Authorization = new System.Net.Http.Headers.AuthenticationHeaderValue("Basic", AuthHeader);
                client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));

                var resp = await client.PostAsync(searchApiUri, new StringContent(QueryHelpers.BuildRequest(querySpec), Encoding.ASCII, "application/json"));


                if (resp.IsErrorResponse(out SumoQueryException sqe))
                {
                    throw sqe;
                }

                var searchJobLocation = resp.Headers.Location;

                var cookies = String.Join(";", resp.Headers.Where(h => h.Key.Equals("Set-Cookie", StringComparison.OrdinalIgnoreCase)).SelectMany(h => h.Value));


                client.DefaultRequestHeaders.Add("cookie", cookies);

                var qs = await WaitForQueryResult(client, searchJobLocation);

                return(new ResultEnumerable <T>(client, searchJobLocation, qs));
            }
            catch (SumoQueryException)
            {
                throw;
            }
            catch (Exception e)
            {
                client.Dispose();
                throw new SumoQueryException($"Unhandled error : {e.Message}", e);
            }
        }