private async Task ExecuteRequestAsync()
        {
            const string mediaType = "application/json";

            var requestDTO = new PostAccountRequestDTO()
            {
                AccountName = $"usr.{AgentName}.{CurrentRequest}",
                Password    = $"pss-{AgentName}-{CurrentRequest}"
            };

            var serializedDTO = JsonConvert.SerializeObject(requestDTO);
            var responseDTO   = (PostAccountResponseDTO)null;

            var stopWatch        = new Stopwatch();
            var proxyMiliseconds = (long)0;

            using (var httpClient = new HttpClient())
            {
                httpClient.Timeout = new TimeSpan(0, 0, 30);

                using (var requestContent = new StringContent(serializedDTO, Encoding.UTF8, mediaType))
                {
                    using (var requestMessage = new HttpRequestMessage(HttpMethod.Post, PostAccountUri))
                    {
                        requestMessage.Headers.Add(HttpRequestHeader.ContentType.ToString(), mediaType);
                        requestMessage.Content = requestContent;

                        stopWatch.Start();
                        using (var responseMessage = await httpClient.SendAsync(requestMessage).ConfigureAwait(false))
                        {
                            var responseContent = await responseMessage.Content.ReadAsStringAsync().ConfigureAwait(false);

                            stopWatch.Stop();

                            try
                            {
                                proxyMiliseconds = long.Parse(responseMessage.Headers.GetValues("X-Proxy-Time").Single());
                                responseDTO      = JsonConvert.DeserializeObject <PostAccountResponseDTO>(responseContent);
                            }
                            catch (Exception)
                            {
                                System.Console.WriteLine("error:");
                                System.Console.WriteLine(responseContent);

                                throw;
                            }
                        }
                    }
                }
            }

            _responses.Add(new PostAccountTestResult(responseDTO, stopWatch.ElapsedMilliseconds, proxyMiliseconds));
        }
        public IActionResult PostAccount([FromBody] PostAccountRequestDTO request)
        {
            var responseDTO = new PostAccountResponseDTO();

            if (request == null)
            {
                responseDTO.StatusCode = 400;
                Response.StatusCode    = responseDTO.StatusCode;

                responseDTO.Messages.Add("invalid request object.");
                return(Json(responseDTO));
            }

            if (string.IsNullOrWhiteSpace(request.AccountName) || request.AccountName.Length < 5)
            {
                responseDTO.Messages.Add("invalid Account Name.");
            }

            if (string.IsNullOrWhiteSpace(request.Password) || request.Password.Length < 6)
            {
                responseDTO.Messages.Add("invalid Password");
            }

            if (responseDTO.Messages.Count > 0)
            {
                responseDTO.StatusCode = 400;
                Response.StatusCode    = responseDTO.StatusCode;

                return(Json(responseDTO));
            }

            var passBytes = Encoding.UTF8.GetBytes(request.Password);

            using (var hmac = new HMACSHA256(Encoding.UTF8.GetBytes(_config.CredentialSalt)))
            {
                var securedPass = hmac.ComputeHash(passBytes);
            }

            responseDTO.StatusCode = 201;
            responseDTO.AccountId  = Guid.NewGuid().ToString("N");

            Response.StatusCode = responseDTO.StatusCode;
            return(Json(responseDTO));
        }