public string GetTargetUriPart(ApiTarget apiTarget) { switch (apiTarget) { case ApiTarget.BankAccounts: return("/v1/BankAccounts/"); case ApiTarget.ClientAuthTokens: return("/v1/ClientAuthToken/"); case ApiTarget.CreditCards: return("/v1/CreditCards/"); case ApiTarget.CreditCardTransactions: return("/v1/CreditCardTransactions/"); case ApiTarget.Events: return("/v1/Events/"); case ApiTarget.FundsTransfers: return("/v1/FundsTransfers/"); case ApiTarget.FundsTransferNotifications: return("/v1/FundsTransferNotifications/"); case ApiTarget.Transfers: return("/v1/Transfers/"); case ApiTarget.Statements: return("/v1/Statements/"); default: throw new NotImplementedException(); } }
/// <exception cref="HttpException"><see cref="HttpStatusCode"/> is not <c>2XX Success</c>.</exception> public async Task <T> PostAsync <T>(request_base content, ApiTarget target, string parameter = null) { return(await MakeBasicHttpRequest <T>(RequestType.Post, content, target, parameter).ConfigureAwait(false)); }
/// <exception cref="HttpException"><see cref="HttpStatusCode"/> is not <c>2XX Success</c>.</exception> /// <exception cref="NotImplementedException"><see cref="RequestType"/> GET is not yet supported.</exception> private async Task <T> MakeBasicHttpRequest <T>(RequestType type, request_base content, ApiTarget target, string parameter) { var serializer = new JavaScriptSerializer(); serializer.MaxJsonLength = int.MaxValue; var serializedContent = serializer.Serialize(content); var stringContent = new StringContent(serializedContent, Encoding.UTF8, "application/json"); using (var client = new HttpClient()) { var factory = new UriFactory(); client.DefaultRequestHeaders.Authorization = content.authentication_header; client.BaseAddress = content.base_uri; var targetUriPart = factory.GetTargetUriPart(target); var targetPath = targetUriPart + parameter; HttpResponseMessage httpResponseMessage; switch (type) { case RequestType.Get: httpResponseMessage = await client.GetAsync(targetPath).ConfigureAwait(false); break; case RequestType.Post: httpResponseMessage = await client.PostAsync(targetPath, stringContent).ConfigureAwait(false); break; case RequestType.Put: httpResponseMessage = await client.PutAsync(targetPath, stringContent).ConfigureAwait(false); break; case RequestType.Delete: httpResponseMessage = await client.DeleteAsync(targetPath).ConfigureAwait(false); break; default: throw new NotImplementedException(); } string stringResult = await httpResponseMessage.Content.ReadAsStringAsync().ConfigureAwait(false); if (!string.IsNullOrEmpty(stringResult)) { return(serializer.Deserialize <T>(stringResult)); } // handle server errors switch (httpResponseMessage.StatusCode) { case HttpStatusCode.BadRequest: throw new HttpException((int)httpResponseMessage.StatusCode, httpResponseMessage.ReasonPhrase); case HttpStatusCode.Unauthorized: throw new HttpException((int)httpResponseMessage.StatusCode, httpResponseMessage.ReasonPhrase); default: throw new HttpException((int)httpResponseMessage.StatusCode, httpResponseMessage.ReasonPhrase); } } }
private async Task <T> DeleteAsyncBankAccountsV1 <T>(bank_account_delete_request content, ApiTarget target) { var factory = new UriFactory(); var serializer = new JavaScriptSerializer(); var stringContent = new StringContent(content.bank_account_token, Encoding.Default, "application/json"); string stringResult; using (var client = new HttpClient()) { client.DefaultRequestHeaders.Authorization = content.authentication_header; client.BaseAddress = content.base_uri; var targetUriPart = factory.GetTargetUriPart(target); // following snippet gleaned from: http://stackoverflow.com/questions/28054515/how-to-send-delete-with-json-to-the-rest-api-using-httpclient HttpRequestMessage request = new HttpRequestMessage { Content = stringContent, Method = HttpMethod.Delete, RequestUri = new Uri(targetUriPart) }; var httpResponseMessage = await client.SendAsync(request).ConfigureAwait(false); // handle server errors if (!httpResponseMessage.IsSuccessStatusCode) { throw new HttpException((int)httpResponseMessage.StatusCode, httpResponseMessage.ReasonPhrase); } stringResult = httpResponseMessage.Content.ReadAsStringAsync().Result; } return(serializer.Deserialize <T>(stringResult)); }