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; }
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; }