internal BitFlyerResponse <T> Get <T>(string apiName, string queryParameters = "") { var path = _publicBasePath + apiName.ToLower(); if (!string.IsNullOrEmpty(queryParameters)) { path += "?" + queryParameters; } using (var request = new HttpRequestMessage(HttpMethod.Get, path)) { var response = new BitFlyerResponse <T>(); try { response.ParseResponseMessage(path, _client.SendAsync(request).Result); return(response); } catch (AggregateException aex) { var ex = aex.InnerException; response.Exception = ex; if (ex is TaskCanceledException) // Caused timedout { response.StatusCode = HttpStatusCode.RequestTimeout; } else if (ex is HttpRequestException) { if (ex.InnerException is WebException) { response.ErrorMessage = ((WebException)ex.InnerException).Status.ToString(); response.StatusCode = HttpStatusCode.InternalServerError; } } else if (ex is WebException) { var we = ex.InnerException as WebException; var resp = we.Response as HttpWebResponse; if (resp != null) { response.StatusCode = resp.StatusCode; } else { response.StatusCode = HttpStatusCode.NoContent; } } else { throw ex; } return(response); } } }
internal BitFlyerResponse <T> PrivatePost <T>(string apiName, string body) { if (!IsPrivateApiEnabled) { throw new NotSupportedException("Access key and secret required."); } var timestamp = DateTime.UtcNow.ToString("yyyy-MM-ddTHH:mm:ss.ff"); var path = _privateBasePath + apiName.ToLower(); var text = timestamp + "POST" + path + body; var sign = BitConverter.ToString(_hmac.ComputeHash(Encoding.UTF8.GetBytes(text))).Replace("-", string.Empty).ToLower(); using (var request = new HttpRequestMessage(HttpMethod.Post, path)) using (var content = new StringContent(body)) { content.Headers.ContentType = new MediaTypeHeaderValue("application/json"); request.Content = content; request.Headers.Clear(); request.Headers.Add("ACCESS-KEY", _apiKey); request.Headers.Add("ACCESS-TIMESTAMP", timestamp); request.Headers.Add("ACCESS-SIGN", sign); var response = new BitFlyerResponse <T>(); try { response.ParseResponseMessage(text, _client.SendAsync(request).Result); return(response); } catch (AggregateException aex) { var ex = aex.InnerException; response.Exception = ex; if (ex is TaskCanceledException) // Caused timedout { response.StatusCode = HttpStatusCode.RequestTimeout; } else if (ex is HttpRequestException) { if (ex.InnerException is WebException) { response.ErrorMessage = ((WebException)ex.InnerException).Status.ToString(); response.StatusCode = HttpStatusCode.InternalServerError; } } else if (ex is WebException) { var we = ex.InnerException as WebException; var resp = we.Response as HttpWebResponse; if (resp != null) { response.StatusCode = resp.StatusCode; } else { response.StatusCode = HttpStatusCode.NoContent; } } else { throw ex; } return(response); } } }