private async void SendAsync(string methodName, string url)
        {
            WebRequestMethod method = WebRequestUtility.GetMethod(methodName);
            var request             = new WebRequest(method, url);

            await OnSendAsync(request);
        }
        protected virtual async Task <IWebRequest> OnCreateRequestAsync(HttpListenerContext context)
        {
            HttpListenerRequest listenerRequest = context.Request;
            WebRequestMethod    method          = WebRequestUtility.GetMethod(listenerRequest.HttpMethod);
            var request = new WebRequest(method, listenerRequest.RawUrl);

            foreach (string key in listenerRequest.Headers.AllKeys)
            {
                string value = listenerRequest.Headers.Get(key);

                request.Headers.Add(key, value);
            }

            if (listenerRequest.HasEntityBody)
            {
                await using var memoryStream = new MemoryStream();

                await listenerRequest.InputStream.CopyToAsync(memoryStream);

                byte[] bytes = memoryStream.ToArray();

                if (bytes.Length > 0)
                {
                    request.SetData(bytes);
                }
            }

            Log.Debug("Received web request", new
            {
                request.Method,
                request.Url,
                request.HasData
            });

            return(request);
        }