private static async Task ProxyRequestAsync(HttpContext context, Uri destinationUri) { if (context == null) { throw new ArgumentNullException(nameof(context)); } if (destinationUri == null) { throw new ArgumentNullException(nameof(destinationUri)); } if (context.WebSockets.IsWebSocketRequest) { await context.AcceptProxyWebSocketRequestAsync(destinationUri); } else { var proxyService = context.RequestServices.GetRequiredService <ProxyService>(); using (var requestMessage = context.CreateProxyHttpRequest(destinationUri)) { var prepareRequestHandler = proxyService.Options.PrepareRequest; if (prepareRequestHandler != null) { await prepareRequestHandler(context.Request, requestMessage); } using (var responseMessage = await context.SendProxyHttpRequest(requestMessage)) { await context.CopyProxyHttpResponse(responseMessage); } } } }