public async Task<HttpApiResponse> ExecuteAsync(HttpApiRequest request)
        {
            try
            {
                var url = request.RawUrl;
                var context = new HttpApiContext { 
                    Request = request
                };

                var r = RegisteredRoutes.FirstOrDefault(x => url.StartsWith(x.RoutePrefix, StringComparison.OrdinalIgnoreCase));
                if (r == null)
                {
                    using (var c = new HttpProxyController())
                    {
                        await c.ExecuteAsync(context);
                        return context.Response;
                    }
                }

                using (BaseHttpApiController c = Activator.CreateInstance(r.Controller) as BaseHttpApiController)
                {
                    context.RoutePrefix = r.RoutePrefix;
                    await c.ExecuteAsync(context);
                    return context.Response;
                }
            }
            catch (Exception ex)
            {
                return HttpApiResponse.FromException(ex);
            }
        }
        private HttpRequestMessage Create(HttpApiRequest request)
        {
            HttpRequestMessage msg = new HttpRequestMessage( new HttpMethod(request.Method), UrlPrefix + request.RawUrl );

            var headers = request.Headers;

            foreach (string k in headers.Keys)
            {
                string v = headers.Get(k);
                if (k.Equals("host", StringComparison.OrdinalIgnoreCase))
                {
                    continue;
                }
                if (k.StartsWith("Content-Length", StringComparison.OrdinalIgnoreCase))
                    continue;

                if (k.StartsWith("Content-Type", StringComparison.OrdinalIgnoreCase))
                    continue;

                try
                {
                    msg.Headers.Add(k, v);
                }
                catch (Exception ex)
                {
                    Console.WriteLine(k);
                    Console.WriteLine(ex);
                }
            }

            if (request.Content != null && request.Content.Length > 0)
            {
                msg.Content = new ByteArrayContent(request.Content);
                msg.Content.Headers.Add("Content-Type",request.Headers["Content-Type"]);
            }

            msg.RequestUri = new Uri(UrlPrefix + request.RawUrl);
            return msg;
        }
Example #3
0
        private async Task<HttpApiRequest> CreateAsync(HttpListenerRequest request)
        {
            var req = new HttpApiRequest
            {
                RawUrl = request.RawUrl,
                Headers = request.Headers,
                Method = request.HttpMethod,
                QueryString = request.QueryString
            };

            // fill form...
            using (MemoryStream ms = new MemoryStream())
            {
                await request.InputStream.CopyToAsync(ms);
                req.Content = ms.ToArray();
                req.Parse();
            }


            return req;
        }