public async Task Run(CancellationToken cancellationToken) { var router = new RoutingMessageHandler(); // Build Proxy TestServer var proxyWebHostBuilder = new WebHostBuilder() .UseStartup <ProxyStartup>() .ConfigureServices(services => { // configure proxy to forward requests to the router services.AddSingleton <Func <HttpMessageHandler> >(() => router); }) .UseUrls("http://localhost:5000"); var proxyTestServer = new TestServer(proxyWebHostBuilder); router.AddHandler("localhost", 5000, proxyTestServer.CreateHandler()); // Build Host1 TestServer var host1WebHostBuilder = new WebHostBuilder() .UseStartup <Program.HostStartup>() .UseSetting("hostname", "HOST 1") .UseUrls("http://localhost:5001"); var host1TestServer = new TestServer(host1WebHostBuilder); router.AddHandler("localhost", 5001, host1TestServer.CreateHandler()); // Build Host2 TestServer var host2WebHostBuilder = new WebHostBuilder() .UseStartup <Program.HostStartup>() .UseSetting("hostname", "HOST 2") .UseUrls("http://localhost:5002"); var host2TestServer = new TestServer(host2WebHostBuilder); router.AddHandler("localhost", 5002, host2TestServer.CreateHandler()); // Get HttpClient make a request to the proxy var httpClient = new HttpClient(router); var response = await httpClient.GetAsync("http://localhost:5000/", cancellationToken); }
public async Task Body_for_post_is_not_lost() { var router = new RoutingMessageHandler(); var upstreamHost = new WebHostBuilder() .Configure( app => app.Use((c, n) => { c.Response.StatusCode = c.Request.ContentLength > 0 || c.Request.Body.CanRead ? 200 : 400; return(Task.CompletedTask); })); var proxyHost = new WebHostBuilder() .ConfigureServices(s => s.AddProxy(c => c.ConfigurePrimaryHttpMessageHandler(() => router))) .Configure( app => app.RunProxy( ctx => ctx.ForwardTo(new UpstreamHost("http://upstream")).Send())); using (var proxyServer = new TestServer(proxyHost)) { using (var upstreamServer = new TestServer(upstreamHost)) { router.AddHandler(new Origin("upstream", 80), upstreamServer.CreateHandler()); var client = proxyServer.CreateClient(); var content = new StringContent("henk", Encoding.UTF8, "text/plain"); var result = await client.PostAsync("/post", content); result.StatusCode.ShouldBe(HttpStatusCode.OK); } } }
public override Task InitializeAsync() { var router = new RoutingMessageHandler(); _upstreamTestServer = new TestServer(UpstreamBuilder); _proxyPort = 81; var proxyBuilder = ProxyBuilder .UseSetting("port", _proxyPort.ToString()) .ConfigureTestServices(services => { services.AddProxy(c => { c.ConfigurePrimaryHttpMessageHandler(() => router); c.ConfigureHttpClient(client => client.Timeout = TimeSpan.FromSeconds(1)); }); }); _proxyTestServer = new TestServer(proxyBuilder); router.AddHandler(new Origin("localhost", _proxyPort), _upstreamTestServer.CreateHandler()); return(Task.CompletedTask); }