private async Task Initialize(string url, RequestMethod method, string postData = "") { Exception = null; string newurl = GetHashedURL(url + "&format=keypair"); //Debug.Print(newurl); //Intentional if (method == RequestMethod.POST) { this.url = newurl; PostData = postData; POSTRequst(); } else { var data = string.Empty; try { var request = (HttpWebRequest)WebRequest.Create(newurl); request.Method = method.ToString(); var response = (HttpWebResponse)await request.GetResponseAsync(); data = new StreamReader(response.GetResponseStream()).ReadToEnd(); } catch (Exception ex) { API.APICallCount -= 1; CallFails?.Invoke(ex); } if (!string.IsNullOrEmpty(data)) { CallSucceeded?.Invoke(data); CallSub?.Invoke(data); } } API.APICallCount += 1; }
private async Task POSTRequst() { string gotData = ""; bool gotDataSuccess = false; try { var request = (HttpWebRequest)WebRequest.Create(url); request.AllowWriteStreamBuffering = true; request.Method = "POST"; var post = "data=" + PostData; request.ContentLength = post.Length; request.ContentType = "application/x-www-form-urlencoded"; request.ServicePoint.Expect100Continue = false; var writer = new StreamWriterLock(await request.GetRequestStreamAsync()); writer.Write(post); writer.Close(); var response = (HttpWebResponse)await request.GetResponseAsync(); gotData = new StreamReader(response.GetResponseStream()).ReadToEnd(); gotDataSuccess = true; } catch (Exception ex) { CallFails?.Invoke(ex); } finally { API.APICallCount -= 1; } //Handle data outside of the try...catch because the result function could throw an error: if (gotDataSuccess) { if (CallSub != null) { CallSub(gotData); CallSucceeded?.Invoke(gotData); } } }