コード例 #1
0
        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();
            }
        }
コード例 #2
0
 /// <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));
 }
コード例 #3
0
        /// <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);
                }
            }
        }
コード例 #4
0
        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));
        }