private async Task <string> Get(string rescueGroupApiUri, string cachedDataName, dynamic apiQueryParameters) { var request = (HttpWebRequest)WebRequest.Create(rescueGroupApiUri); request.Method = "POST"; request.ContentType = "application/json"; var jsonData = JsonConvert.SerializeObject(apiQueryParameters); var bytes = Encoding.UTF8.GetBytes(jsonData); var requestStream = await request.GetRequestStreamAsync(); requestStream.Write(bytes, 0, bytes.Length); var result = string.Empty; if (await _storageService.IsRescueGroupApiCachedDataAvailable(cachedDataName)) { using (var cachedStream = new MemoryStream()) { await _storageService.GetRescueGroupApiCachedData(cachedDataName, cachedStream); using (var cachedReader = new StreamReader(cachedStream)) { result = cachedReader.ReadToEnd(); } } } else { var response = await request.GetResponseAsync(); var stream = response.GetResponseStream(); if (stream != null) { StreamReader reader; using (var ms = new MemoryStream()) { stream.CopyTo(ms); ms.Position = 0; reader = new StreamReader(ms); result = reader.ReadToEnd(); ms.Position = 0; await _storageService.AddRescueGroupApiCachedData(cachedDataName, ms); } stream.Dispose(); reader.Dispose(); } } return(result); }