private async Task ProxyTheRequest(HttpContext context, HttpRequestMessage proxyRequest, IProxyRule proxyRule)
        {
            using (var responseMessage = await _httpClient.SendAsync(proxyRequest,
                                                                     HttpCompletionOption.ResponseHeadersRead,
                                                                     context.RequestAborted)) {
                if (proxyRule.PreProcessResponse)
                {
                    context.Response.StatusCode  = (int)responseMessage.StatusCode;
                    context.Response.ContentType = responseMessage.Content?.Headers.ContentType?.MediaType;
                    foreach (var header in responseMessage.Headers)
                    {
                        context.Response.Headers[header.Key] = header.Value.ToArray();
                    }
                    // SendAsync removes chunking from the response.
                    // This removes the header so it doesn't expect a chunked response.
                    context.Response.Headers.Remove("transfer-encoding");

                    if (responseMessage.Content != null)
                    {
                        foreach (var contentHeader in responseMessage.Content.Headers)
                        {
                            context.Response.Headers[contentHeader.Key] = contentHeader.Value.ToArray();
                        }
                        await responseMessage.Content.CopyToAsync(context.Response.Body);
                    }
                }

                await proxyRule.ResponseModifier(responseMessage, context);
            }
        }
Пример #2
0
 public void AddProxyRule(IProxyRule rule)
 {
     ProxyRules.Add(rule);
 }