public virtual async Task <HttpContent> CreateHttpContentAsync(RQLRequestBatch requestBatch) { if (requestBatch == null) { throw new ArgumentNullException(nameof(requestBatch)); } if (requestBatch.Requests.Count == 0) { throw new ArgumentException("There is no RQLRequests to send."); } var json = SerializeRqlRequestBatch(requestBatch); HttpContent content = new StringContent(json, Encoding.UTF8, "application/json"); if (requestBatch.HasFiles) { var multiPartContent = new MultipartFormDataContent(); multiPartContent.Add(content, "json", "json"); foreach (var file in requestBatch.AllFiles) { multiPartContent.Add(new ByteArrayContent(file.FileContent), file.FilePart, file.FilePart); } content = multiPartContent; } var body = await content.ReadAsByteArrayAsync(); var md5 = RQLRequestSignator.GetMd5Hash(body); content.Headers.Add("Content-MD5", md5); content.Headers.ContentLength = body.LongLength; return(content); }
internal RQLResponse(RQLRequestBatch batch, string jsonResult, bool success) { Success = success; Batch = batch; JsonResponse = jsonResult; if (success) { Results = Newtonsoft.Json.JsonConvert.DeserializeObject <IReadOnlyList <object[][]> >(jsonResult); } }
internal string SerializeRqlRequestBatch(RQLRequestBatch requestBatch) { if (requestBatch == null) { throw new ArgumentNullException(nameof(requestBatch)); } if (requestBatch.Requests.Count == 0) { throw new ArgumentException("There is no RQLRequests to serizalze."); } var rqlRequestFormat = requestBatch.Requests.Select(r => new[] { r.Query, r.Parameters ?? new object() }); var rqlRequest = Newtonsoft.Json.JsonConvert.SerializeObject(rqlRequestFormat); return(rqlRequest); }
public virtual async Task <RQLResponse> MakeRequestsAsync(RQLRequestBatch requestBatch) { if (requestBatch == null) { throw new ArgumentNullException(nameof(requestBatch)); } var content = await CreateHttpContentAsync(requestBatch); _httpClient.DefaultRequestHeaders.Date = DateTime.UtcNow; CreateAuthorizationHeader(_httpClient, content.Headers); var response = await _httpClient.PostAsync(_option.Value.RQLEndPoint, content); var resultString = await response.Content.ReadAsStringAsync(); return(new RQLResponse(requestBatch, resultString, response.IsSuccessStatusCode)); }