public async Task <Account> GetAccount(string accountNumber)
        {
            var accountUrl = $"https://{_hostName}/Bank/Api/v1/Accounts/{_userId}/{accountNumber}";
            var token      = await IdentityServer.GetToken(_userId, _clientId, _secret, _hostName);

            using (var wc = new WebClient())
            {
                wc.Headers[HttpRequestHeader.Authorization] = $"Bearer {token.access_token}";
                wc.Headers[HttpRequestHeader.Accept]        = "application/json";
                var result = await wc.DownloadStringTaskAsync(accountUrl);

                var list = JsonConvert.DeserializeObject <ItemResult <Account> >(result);
                return(list.item);
            }
        }
        public async Task <decimal> Transfer(TransferRequest request)
        {
            var transferUrl = $"https://{_hostName}/Bank/Api/v1/Transfers/{_userId}";
            var token       = await IdentityServer.GetToken(_userId, _clientId, _secret, _hostName);

            var json         = JsonConvert.SerializeObject(request);
            var encodedValue = Encoding.UTF8.GetBytes(json);

            using (var wc = new WebClient())
            {
                wc.Headers[HttpRequestHeader.Authorization] = $"Bearer {token.access_token}";
                wc.Headers[HttpRequestHeader.Accept]        = "application/json";
                wc.Headers[HttpRequestHeader.ContentType]   = "application/json";
                await wc.UploadDataTaskAsync(transferUrl, encodedValue);
            }

            var account = await GetAccount(request.fromAccount);

            return(account.available);
        }
        public async Task <ListResult <Transaction> > GetTransactions(string accountNumber, int?index = null, int?length = null, DateTime?startDate = null, DateTime?endDate = null)
        {
            var sb = new StringBuilder();

            sb.Append($"https://{_hostName}/Bank/Api/v2/Transactions/{_userId}/{accountNumber}");

            if (index != null)
            {
                sb.Append($"?index={index}");
            }
            if (length != null)
            {
                sb.Append($"{QueryCharacter(sb.ToString())}length={length}");
            }
            if (startDate != null)
            {
                sb.Append($"{QueryCharacter(sb.ToString())}startDate={startDate.Value:yyyy-MM-dd}");
            }
            if (endDate != null)
            {
                sb.Append($"{QueryCharacter(sb.ToString())}endDate={endDate.Value:yyyy-MM-dd}");
            }

            var transactionsUrl = sb.ToString();
            var token           = await IdentityServer.GetToken(_userId, _clientId, _secret, _hostName);

            using (var wc = new WebClient())
            {
                wc.Headers[HttpRequestHeader.Authorization] = $"Bearer {token.access_token}";
                wc.Headers[HttpRequestHeader.Accept]        = "application/json";
                var result = await wc.DownloadStringTaskAsync(transactionsUrl);

                var list = JsonConvert.DeserializeObject <ListResult <Transaction> >(result);
                return(list);
            }
        }